HtmlAgilityPack:给定一个html文件,我如何根据给定的类属性获取节点

时间:2013-05-04 02:02:51

标签: c# html xpath html-parsing html-agility-pack

所以基本上我想过滤掉HTML并保留节点的层次结构。例如,我有这个,我只想要在其层次结构中具有类“b.1.1”的HTML:


<html>
 <div class="a">
 </div>
 <div class="b">
     <div class="b.1">
           <div class="b.1.1">
              <span>me</span>
           </div>
           <div class="b.1.2">
           </div>
     </div>
 </div>
 <div class="c">
 </div>
</html>

结果应为:


<html>
 <div class="b">
     <div class="b.1">
           <div class="b.1.1">
              <span>me</span>
           </div>
     </div>
 <div>
</html>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你可以写一个递归函数,一直到父节点:

private HAP.HtmlNode FindParentNodeThatContainsClass(string classToFind, HAP.HtmlNode node)
{
    string xPath = string.Format("//*[contains(@class,'{0}')]", classToFind);
    if ( node.SelectNodes(node.XPath + "//" + xPath ) != null && node.SelectNodes(node.XPath + "//" + xPath ).Count() >= 1)
    {
        return node;
    }
    else
    {
        if (node.ParentNode != null)
        {
            var parentNode = FindParentNodeThatContainsClass(xPath , node.ParentNode);
            return parentNode;
        }
        else
        {
            return null;
        }
    }
}

我还没有测试过这个功能,但这应该可以让你开始。