HtmlAgilityPack跳过或删除嵌套表

html-agility-pack

我正在使用HtmlAgilityPack来检索以下html(注意嵌套表):

<table class="123">
<tr>
    <table class="789">
    <tr>
        <td>abc</td>
    </tr>
    <tr>
        <td>def</td>
    </tr>
    </table>
</tr>

<tr>
    <td>info 1</td>
</tr>

<tr>
    <td>info 2</td>
</tr>

<tr>
    <td>info 3</td>
</tr>
</table>

现在,我试图找到一种聪明的方法来从父表中获取一些信息,并从嵌套表中获取一些信息。

到目前为止,我有以下内容:

var parentTable = document.DocumentNode.SelectNodes("//table[@class='123']").FirstOrDefault();

var nestedTable = parentTable.SelectNodes("//table[@class='789']").FirstOrDefault();

我现在可以使用nestedTable来获取我想要的东西(abc,def)......

但是当我尝试从父表中获取<tr> ,如下所示:

var parentTableRows = parentTable.SelectNodes(".//tr");

它似乎包括(在集合中)嵌套表中的<tr>以及...

换句话说,根据上面的html代码,我期望有一个4 <tr>的集合,但由于它包含嵌套表中的<tr> ,我得到了一个收集6 <tr>

如何跳过碰巧嵌套表的第一个<tr> ,这样我就可以玩游戏并获取我想要的信息(info1,info2,info3)(希望我有意义)

提前致谢!

一般承认的答案

//是XPATH表达式,表示“扫描所有节点和子节点”。这就是为什么//tr将所有tr都放在根目录之下。

如果您只是执行parentTable.SelectNodes("tr") (或等效的"./tr" ),您将选择根目录下的所有TR。

如果你想跳过第一个,那么你可以在元素的position() (XPATH函数)上添加一个XPATH过滤器:

var parentTableRows = parentTable.SelectNodes("tr[position() > 1]");


Related

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