【问题标题】:XPATH query, HtmlAgilityPack and Extracting TextXPATH 查询、HtmlAgilityPack 和提取文本
【发布时间】:2011-02-28 10:14:16
【问题描述】:

我一直试图从名为 "tim_new" 的类中提取链接。我也得到了解决方案。

解决方案、sn-p 和必要的信息都给出here

上述 XPATH 查询是 "//a[@class='tim_new'],我的问题是,这个查询如何区分 sn-p 的第一行(在上面的链接中给出的 sn-p 的第二行)。

更具体地说,这个 XPATH 查询的字面翻译(英文)是什么。


另外,我想写几行代码来提取针对NSE:写的文本

<div class="FL gL_12 PL10 PT15">BSE: 523395 &nbsp;&nbsp;|&nbsp;&nbsp; NSE: 3MINDIA &nbsp;&nbsp;|&nbsp;&nbsp; ISIN: INE470A01017</div>

希望能帮助您形成必要的选择查询。

我的代码写成:

IEnumerable<string> NSECODE = doc.DocumentNode.SelectSingleNode("//div[@NSE:]");

但这看起来不对。不胜感激。

【问题讨论】:

  • 链接示例中的第二个 a 元素的类属性设置为 tim,而不是 tim_new。它读取 class=tim 而不是 class="tim_new"

标签: c# html xpath html-agility-pack


【解决方案1】:

第一个选择中的 XPath 读取“选择所有具有名为 class 且值为 tim_new 的属性的文档元素”。括号中的内容不是您要返回的内容,而是您应用于搜索的条件。

我没有 HTML Agility 包,但如果您尝试查询以“NSE:”作为文本的 div,则第二个查询的 XPath 应该只是“//div”,那么您将想要使用 LINQ 进行过滤。

有点像

var nodes = 
    doc.DocumentNode.SelectNodes("//div[text()]").Where(a => a.InnerText.IndexOf("NSE:") > -1);

所以在英文中,“将所有立即包含文本的 div 元素返回到 LINQ,然后检查内部文本值是否包含 NSE:”。 同样,我不确定语法是否完美,但就是这样。

XPath "//div[@NSE:]" 将返回所有具有名为 NSE: 的属性的 div,这无论如何都是非法的,因为属性名称中不允许使用 ":"。您正在寻找元素的文本,而不是其属性之一。

希望有帮助。'

注意:如果您的嵌套 div 都包含 &lt;div&gt;NSE: some text&lt;div&gt;NSE: more text&lt;/div&gt;&lt;/div&gt; 中的文本,您将获得重复的结果。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2012-10-27
相关资源
最近更新 更多