【发布时间】:2014-09-03 22:06:23
【问题描述】:
我正在使用 HTMLAgilityPack 库在 C# 中解析 HTML DOM,并且想知道在到达特定元素后如何遍历 DOM。
例如,当我到达带有“some-class”类的td 时,我想去第三个兄弟td 并获取其嵌套href 的anchor。
<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 的相关锚点?
【问题讨论】:
-
到目前为止,这可行(但感觉非常笨拙)...
HtmlNode siblingAnchor = node.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.FirstChild.NextSibling; -
这实际上是获取特定兄弟节点的合理代码(如果您可以容忍偶尔的
NullRefferenceException,如果 HTML 更改)。我建议阅读一些基本的 XPath 教程,以便能够更精确/更快地选择元素(即"//"必须搜索整个树以进行匹配,通常您可以将搜索范围缩小到至少某个特定的子树,您也可以直接用 XPath 匹配属性)。 -
@AlexeiLevenkov HTML 应该是静态的,如果它发生变化,我将能够在程序的输出中进行验证。我将深入研究 XPath 教程以了解如何进行优化。再次感谢您将我推荐给 HTMLAgilityPack,顺便说一句:)
标签: c# html asp.net .net html-agility-pack