敏捷助手 Html 正在检索 p/paragraphs 文本,直到到达另一个锚点

Agility Helper Html retrieving p/paragraphs text until another anchor is reached

我正在使用 Agility Helper HTML,到目前为止我有这样的代码:

        var linkWeb = new HtmlWeb();
        var linkDoc = web.Load(link);
        foreach (HtmlNode l in linkDoc.DocumentNode.SelectNodes("//p"))
        {
            Console.WriteLine("text #"+ i++= + l.InnerText);
        }

所以这可以很好地读取网页段落文本,除了,我希望它读取所有合并的段落文本,直到到达另一个锚标记,或者如果您能想到更好的方法。

<p>
<a href="1.shtml#Top" target="_top">PART 1</a>
CONTENT1;
CONTENT2;
</p>
<p>CONTENT3.</p>

<p>
<a href="2.shtml#Top" target="_top">PART 2</a>
CONTENT1&nbsp;
CONTENT2&nbsp;
CONTENT3&nbsp;
CONTENT4
</p>
<p>CONTENT5.</p>
<p>CONTENT6.</p>
<p>CONTENT8.</p>

<p>
<a href="3.shtml#Top" target="_top">PART 3</a>
CONTENT1&nbsp;
CONTENT2&nbsp;
CONTENT3&nbsp;
CONTENT4.
</p>

所以现在使用我的代码,它会分别读取每个段落的 P 文本。

文本 #1 是

内容 1 内容 2

文本 # 2 是 内容 3.

我想读这个 文本 #1 是 内容1 内容2 内容 3.

这是动态的,段落数会发生变化。

某种检查以确保在点击锚点之前它读取所有段落/InnerTexts 并且知道它应该在同一个文本 # 中。

您可以这样实现:

    foreach (HtmlNode l in linkDoc.DocumentNode.SelectNodes("//p"))
    {
        if (l.ChildNodes.Any(node => node.Name == "a"))
        {
            Console.WriteLine();
            Console.Write("text #" + i++);
        }
        Console.Write(l.InnerText + " ");
    }