想象一下类似于此
的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
。但是,我更喜欢更通用的解决方案,因为我不知道我将在维基百科页面中找到什么。
答案 0 :(得分: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));