C# 如何使用HTML agility pack选择嵌套元素?
我有以下一种xml/htmlC# 如何使用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>
<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
元素。