1

想象一个与此类似的 Html 文档

   <div>
      <div>...</div>
      <table>...</table>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <table>...</table>
      <p>...</p>
      <div>...</div>
      <p>...</p>
      <p>...</p>
    </div>

我想取第一个段落节点序列。我试图遍历 p 检查的节点集合,nextSibling直到找到与 p 不同的名称,但这始终是文本。

更具体地说,我想要的是从维基百科页面获取文本的第一部分。我的意思是,之前的所有段落都找到了一个非段落,例如目录或其他页面上的页面末尾。在之前的示例中,我想使用前三段的 HtmlDocument。

我可以将其转换为字符串,并使用IndexOf. 但是我更喜欢更通用的解决方案,因为我不知道我会在维基百科页面中找到什么。

4

1 回答 1

1

您可以将 SkipWhile 和 TakeWhile 与 div 中的子列表结合使用。

 var children = doc.DocumentNode.SelectNodes("/div/*");
 var paragraphs = children
      .SkipWhile(child => !string.Equals(child.Name, "p", StringComparison.OrdinalIgnoreCase))
      .TakeWhile(child => string.Equals(child.Name, "p", StringComparison.OrdinalIgnoreCase));
于 2013-01-17T22:49:27.540 回答