Http Agility Pack - 访问兄弟姐妹?

Posted

技术标签:

【中文标题】Http Agility Pack - 访问兄弟姐妹?【英文标题】:Http Agility Pack - Accessing Siblings? 【发布时间】:2011-05-01 05:07:15 【问题描述】:

使用 html Agility Pack 非常适合获取后代和整个表等...但是在以下情况下如何使用它

...Html Code above...

<dl>
<dt>Location:</dt>
<dd>City, London</dd>
<dt style="padding-bottom:10px;">Distance:</dt>
<dd style="padding-bottom:10px;">0 miles</dd>
<dt>Date Issued:</dt>
<dd>26/10/2010</dd>
<dt>type:</dt>
<dd>cement</dd>
</dl>

...HTML Code below....

你怎么能找到如果在这种情况下英里小于 15,我不明白你可以对元素做一些事情,但是你必须让所有元素找到正确的元素,然后找到数字来检查它的值吗?或者有没有办法将正则表达式与敏捷包一起使用来以更好的方式实现这一点......

【问题讨论】:

【参考方案1】:

只获取 html 同级

public static List<HtmlNode> GetHtmlNodeList(string html)

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);
        var regs = doc.DocumentNode.SelectSingleNode("//div");
        var first = regs.Descendants().FirstOrDefault();
        var second = first.NextSibling;
        List<HtmlNode> list = new List<HtmlNode>();
        while (second != null)
        
            list.Add(second);
            second = CheckSibling(second);
        
        return list;


private static HtmlNode CheckSibling(HtmlNode node)

        node = node.NextSibling;
        return node;          

【讨论】:

【参考方案2】:

我很确定(尚未检查)它支持 following-sibling:: 轴,因此您可以要么找到节点 "dt[.='Distance:']",然后找到 node.SelectSingleNode("following-sibling::dd[1]") - 或(更简单) 如果您确定 dd 始终紧跟在 dt 之后,请使用 node.NextSibling

例如:

string distance = doc.DocumentNode.SelectSingleNode(
          "//dt[.='Distance:']/following-sibling::dd").InnerText;

【讨论】:

以上是关于Http Agility Pack - 访问兄弟姐妹?的主要内容,如果未能解决你的问题,请参考以下文章

csharp Html Agility Pack #CSharp #HtmlParsing

Html Agility Pack:查找评论节点

Html Agility Pack/C#:如何创建/替换标签?

如何使用 Html Agility Pack 使请求超时

HTML Agility Pack 条带标签不在白名单中

使用 HTML Agility Pack 替换 HTML div InnerText 标签