2

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

此处提供了解决方案、代码段和必要信息

所说的 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:]");

但这看起来不对。将不胜感激一些帮助。

4

1 回答 1

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> 你会得到重复的结果。

于 2010-06-06T17:55:51.483 回答