如何使用HTML Agility Pack选择嵌套元素?

7

I have a following kind of 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'标签。我该怎么做?

1个回答

8
HtmlAgilityPack使用XPath选择器来选择节点。
针对您的问题,这将起作用:
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"),它都会获取页面中的所有链接,而你需要获取的是<l1s>标签内的<a>标签,所以你必须执行:item.SelectNodes("./a")".//a"(如果您不希望<a>标签是<l1s>标签的直接子元素)。 - Oscar Mederos
在你点踩之前,你真的尝试过这个吗?示例按照广告宣传的方式工作 - foreach循环单独操作每个“l1”注释,因此您将获得2个a元素集合,首先是第一个“l1”中的4个a元素,然后是第二个“l1”中的4个a元素。 - BrokenGlass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接