C#HtmlAgilityPack添加tbody

c# html html-agility-pack xpath

C#HtmlAgilityPack,将LoadHtml函数之后的tbody元素添加到表中的DOM树中,即使它在原始HTML文档中不存在。我怎么能禁用它?

我的算法通过遍历dom树创建一些XPATH表达式,原始文档中的非现有tbody元素使SelectNodes找不到所需的项目。花了我很多时间来弄明白:|

是否有可能使SelectNodes还考虑由HtmlAgilityPack添加的节点?

例:

<table>
    <tr><td>data</td></tr>
</table>

我的应用程序将生成此XPATH以提取'data':// table / tbody / tr / td

表达式中的tbody标签被添加,因为它在HtmlAgilityPack解析html代码后在DOM树中,因为HtmlAgilityPack即使它不存在也添加了它。因此

doc.DocumentNode.SelectNodes("//table/tbody/tr/td");

会失败的。

换句话说,tr元素(HtmlElement)父TagName等于'TBODY'而不是'TABLE'。此外,我正在解析许多不同的网站,所以这是一种情况。

SelectNodes正在搜索原始HTML代码,而不是通过HtmlDocument.LoadHtml之后的DOM树搜索,或者它不考虑由它添加的“虚拟”元素。

热门答案

您不必使用完整层次结构。

如果您想要的只是td请使用以下内容:

doc.DocumentNode.SelectNodes("//table//td");

或者只是忽略tbody节点并获得您关心的所有层次结构:

doc.DocumentNode.SelectNodes("//table//tr/td");


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因