XPATH查询,HtmlAgilityPack和提取文本

时间:2010-06-06 17:02:18

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

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

解决方案,摘要和必要信息都是here

上述XPATH查询是"//a[@class='tim_new'],我的问题是,此查询如何区分代码段的第一行(在上面的链接和代码段的第二行中给出)。

更具体地说,这个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:]");

但这看起来不对。希望得到一些帮助。

1 个答案:

答案 0 :(得分: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都包含<div>NSE: some text<div>NSE: more text</div></div>中的文本,那么您将获得重复的结果。