【问题标题】:HtmlAgilityPack: Given a html file, how can I get nodes based on given class attributesHtmlAgilityPack:给定一个 html 文件,如何根据给定的类属性获取节点
【发布时间】:2013-04-28 12:04:33
【问题描述】:

所以基本上我想过滤掉 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>

有什么想法吗?

【问题讨论】:

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


    【解决方案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;
            }
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多