C# 如何使用HTML agility pack选择嵌套元素?

C# 如何使用HTML agility pack选择嵌套元素?,c#,html-agility-pack,C#,Html Agility Pack,我有以下一种xml/html <root> <p1> <l1> <a>something</a> <a>something</a> <a>something</a> <a>something</a> </l1> <l1> <a>

我有以下一种xml/html

<root>
<p1>
    <l1>
        <a>something</a>
        <a>something</a>
        <a>something</a>
        <a>something</a>
    </l1>
    <l1>
        <a>something</a>
        <a>something</a>
        <a>something</a>
        <a>something</a>
    </l1>
</p1>
</root>

某物
某物
某物
某物
某物
某物
某物
某物
我想选择l1标记的集合,对于每个l1标记,我想为当前l1标记选择所有“a”标记。如何操作???

HtmlAgilityPack用于选择节点

对于您的问题,这将起作用:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"test.html");

var l1s = doc.DocumentNode.SelectNodes("//l1");
foreach (var item in l1s)
{
    var links = item.SelectNodes("a");
}
请注意,我使用了一个XPath选择器,它将抓取文档中的所有l1元素(通过使用前导的
/
),更具体地说,您还可以执行以下操作:

var l1s = doc.DocumentNode.SelectNodes("root/p1/l1");

每次执行
item.SelectNodes(“a”)
,它将获得页面中的所有链接,您需要获得的是
内的
标记,因此您必须执行:
item.SelectNodes(“/a”)
//a”
如果你不想
标签成为
标签的中间子项。你真的在投票前尝试过这个吗?该示例的工作方式与广告中的一样—foreach循环分别对每个
l1
注释进行操作,因此您将获得两组
a
元素,首先是第一个'l1'中的4个
a
元素,然后是第二个
l1
中的4个
a
元素。