使用HTML敏捷包遍历DOM
本文关键字:遍历 DOM 包遍历 HTML 使用 | 更新日期: 2023-09-27 18:20:30
我正在用HTMLAgilityPack
库解析C#中的HTML DOM,我想知道一旦到达特定元素,如何遍历DOM。
例如,当我使用类"some class"到达td
时,我想转到第三个同级td
并获取其嵌套anchor
的href
。
<td class="some-class">Content I care about</td>
<td>Content I don't want</td>
<td>Content I don't want</td>
<td>
<a href="http://www.the-url-I-want.com">Some Amazing URL</a>
</td>
目前,我正在通过降落在我想要的td
foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//td"))
{
HtmlAttribute nodeClass = node.Attributes["class"];
if(nodeClass != null && nodeClass.Value == "some-class")
{
//Find the anchor that is 3 siblings away
//Do something
}
}
有人知道我会如何使用HTMLAgility包来获取单个td
的相关锚吗?
学习XPath,您的工作会轻松很多。例如,要获得类属性等于"某个类"的<td>
元素,我们可以使用以下Xpath:
//td[@class='some-class']
以及获得第三个下一个同级<td>
:
/following-sibling::td[3]
所以你的循环可以重写如下:
var xpath = "//td[@class='some-class']/following-sibling::td[3]/a";
foreach(HtmlNode a in doc.DocumentNode.SelectNodes(xpath))
{
//Do something with the anchor variable a
}
顺便说一句,更安全的获取属性值的方法是使用GetAttributeValue()
方法:
var href = a.GetAttributeValue("href", "");
第二个参数是在找不到属性时返回的默认值。