【问题标题】:Content of NextSibling not being printed outNextSibling 的内容没有被打印出来
【发布时间】:2013-04-19 22:11:21
【问题描述】:

我有这段代码,但我不知道为什么它没有打印出下一个容器的内容。

     HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
     doc.Load("Billing106.htm");

     foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//div[starts-with(., ' SEMANTIC:')]"))
     {
        richTextBox1.Text += "SC: " + div.NextSibling.InnerText.ToString();
     }

我在一个 HTML 文件中有几个条目如下:

    <div style="top: 232px; left: 332px;" class="S4"> SEMANTIC:</div>
    <div style="top: 233px; left: 377px;" class="S3"> SBR02 specifies the relationship to the person insured.</div>

我无法检查 class="S3",因为有多个项目使用同一类。

如果有人知道如何使它工作,将不胜感激,因为我想回家享受我的周末,我一定会送你一个电子啤酒,呵呵。

注意:它确实打印了 3 次 "SC:" 它在文档中出现了 3 次。

【问题讨论】:

    标签: c# winforms html-agility-pack


    【解决方案1】:

    这是因为这个 DIV 元素的下一个兄弟元素不是另一个 DIV,而是两个 DIV 之间的文本(是的,它们也是节点)。如果你想要 DIV 类型的下一个兄弟,你应该这样做:

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
         doc.Load("Billing106.htm");
    
     foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//div[starts-with(., ' SEMANTIC:')]"))
     {
        richTextBox1.Text += "SC: " + div.SelectSingleNode("following-sibling::div").InnerText.ToString();
     }
    

    有关 XPATH 轴的说明,请参见此处:XPATH Axes

    【讨论】:

    • 非常感谢您的回复,这确实成功了,我不敢相信它是如此简单! :D
    • 不过,我还有一个问题要问你,我将如何在“语义”div 下获取多个 div 的“innertext”?
    • 这是一个较长的 HTML 示例链接pastebin.com/embed_iframe.php?i=zjQhFSPz 我想将所有信息保存在 SQL 数据库中
    • 你可以做一个 SelectNodes 而不是 SelectSingleNode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多