【问题标题】:Getting value from string using specific conditions使用特定条件从字符串中获取值
【发布时间】:2012-10-05 18:10:38
【问题描述】:

我的字符串中有一个 html 数据,我只需要在其中获取段落值。下面是一个示例 html。

<html>
  <head>
    <title>
       <script>
          <div>
               Some contents
           </div>
          <div>
            <p> This is what i want </p>
            <p> Select all data from p </p>
            <p> Upto this is required </p>
          </div>
         <div>
          Other html elements
         </div>

那么如何使用字符串操作从段落中获取数据。

期望的输出

<Div>
  <p> This is what i want    </p>
  <p> Select all data from p </p>
  <p> Upto this is required  </p>
</div>

【问题讨论】:

  • 您是想获取所有包含 p 个元素的 div 元素,还是只获取整个文档中的 p 个元素?
  • 我尝试使用 xpath。但我的 html 格式不正确。所以没能成功。
  • @tranceporter:特定 div 标签中的 p 个元素。
  • 如果你想要一个特定的 div 标签,那么你需要一些机制来唯一地识别它。您必须为其分配一个 id。否则,您将不得不选择所有具有 p 元素的 div。检查我的更新答案

标签: c# string


【解决方案1】:

给 div 一个 ID,例如

<div id="test">
<p> This is what i want </p>
<p> Select all data from p </p>
<p> Upto this is required </p>
</div>

然后使用//div[@id='test']/p

解决方案分解:

//div                    - All div elements
[@id='test']   - With an ID attribute whose value is test
/p    

【讨论】:

  • 但是如果我有几个 div 元素怎么办。如何对包含

    标签的单个 div 进行排序。

  • 使用 ID 代替,因此它将用于唯一的 div。我将编辑我的答案以显示这一点。
  • 让我试试这个。会让你知道的。
  • 好的,让我知道进展如何。您对我说您只想要特定的 p 标签,但在您回答的评论中您说所有 p 标签?使用 class 或 div 取决于您是要获取多个 div 的 p 标签还是只获取一个唯一 div 的 p 标签。
  • 只有一个独特的 div 的 p 标签。我希望所有 p 标签都出现在一个唯一的 div 中。在上面的例子中,我想要输出为:这是我想要从 p 中选择所有数据到这是必需的
【解决方案2】:

我用Html agility Pack 来做类似的事情。然后你可以使用 LINQ 来获得你想要的。

【讨论】:

  • 我使用的是 c# 2.0。所以 linq 是不可能的。
【解决方案3】:

Xpath 是显而易见的答案(如果 HTML 不错,有根等),但某些第三方小部件如 chilkat

【讨论】:

    【解决方案4】:

    如果您使用其他帖子中提到的 Html Agility Pack,您可以使用以下方法获取 html 中的所有段落元素:

    HtmlDocument doc = new HtmlDocument();
    doc.Load("your html string");
    var pNodes = doc.DocumentNode.SelectNodes("//div[@id='id of the div']/p")
    

    由于您使用的是 .net Framework 2.0,因此您需要较旧版本的 Agility Pack,可在此处找到:HTML Agility Pack

    如果你只想要段落内的文字,你可以使用

    var pNodes = doc.DocumentNode.SelectNodes("//div[@id='id of the div']/p/text()")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多