首页 文章

XPATH查询,HtmlAgilityPack和提取文本

提问于
浏览
2

我一直试图从名为“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 回答

  • 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> 中的文本,那么您将获得重复的结果 .

相关问题