【问题标题】:HTMLAgilityPack XPath Expression not fetching all nodesHTMLAgilityPack XPath 表达式未获取所有节点
【发布时间】:2012-07-09 17:37:23
【问题描述】:

范围 我正在尝试解析this page。对于不熟悉葡萄牙语的人,此页面包含某个课程(大学课程)的所有科目,按“学期”分组。

所以,每次看到“7º Período Ideal”这样的内容时,您都可以理解为“Subjects 从第 7 学期开始”。

问题我正在使用 XPath 表达式从包含这些表行的表中获取所有表行。

XPath Used : //table[@cellspacing=2]//tr

C# Statement : htmlMap.DocumentNode.SelectNodes("//table[@cellspacing=2]//tr");

此 C# 语句收到的 HtmlNodeCollection 仅包含表行节点,直到带有此文本 EAD0648 Gerência de Produtos / Serviços e Mercados 的那个,紧接着带有 5º Período Ideal 的那个。

这个 XPath “有效”,但我得到了所有的 tr's(正如预期的那样),这不是我想要的。

//tr

为什么 XPath 没有检索该节点之后的所有节点?

检索到的节点数量是否有上限? 我错过了什么吗?

提前致谢

【问题讨论】:

  • 您能否将其缩减为仍能重现问题的最小 html 文档,然后将该文档添加到您的问题文本中?该链接可能会有所帮助,但如果该链接不再有效,它将不会对 Stack Overflow 多年后的访问者有太大帮助。
  • HTML 很大 =/ 我可能会将其发布到 pastebin
  • 您不能将其减少到仍然存在问题的较小样本吗?
  • 最短的,会导致700多行的复制粘贴
  • 我没有深入研究它,但在 EAD0648 行之后不久,它的子行具有结束 TR 标签,但似乎没有打开 TR 标签,这似乎很奇怪。

标签: c# html-agility-pack


【解决方案1】:

我过去也遇到过这种情况,如果表格格式不正确,就会出现这样的问题。我快速查看了该页面的 HTML,发现可能存在问题,在第 2785 行有一个 </tr> 然后没有打开 <tr> 第 2796 行有另一个 </tr>

我承认我没有进行深入验证来检查,但仅仅通过查看我无法匹配开头的<tr>。我立即检查了这一点,因为正如我所提到的,我在使用格式错误的表格的页面时遇到了这个确切的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2016-10-03
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多