C# 未打印下一个标签的内容

C# 未打印下一个标签的内容,c#,winforms,html-agility-pack,C#,Winforms,Html Agility Pack,我有这段代码,我不明白为什么它不打印下一个容器的内容 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.Load("Billing106.htm"); foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//div[starts-with(., ' SEMANTIC:')]")) {

我有这段代码,我不明白为什么它不打印下一个容器的内容

     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>
语义:
SBR02规定了与被保险人的关系。
我无法检查class=“S3”,因为有多个项目使用同一个类

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


注意:它会打印3次“SC:”它在文档中出现3次。

这是因为这个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轴的解释,请参见此处:

非常感谢您的回复,这确实起到了关键作用,我不敢相信事情会如此简单!:我还有一个问题要问你,我如何在“语义”div下获取多个div的“innertext”呢?这里是一个较长的HTML示例链接,我想将所有信息保存在SQL数据库中你可以使用SelectNodes而不是SelectSingleNode