使用HtmlAgilityPack从节点获取文本

时间:2010-11-01 20:57:03

标签: c# xpath html-agility-pack

我有以下HTML:

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

提取字符串“I want <em>this</em> text.”的XPath表示法是什么? 编辑:我不一定要一个XPath表达式来提取字符串。选择多个节点,并迭代它们以产生句子,也会很棒。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(myHtml);
doc.DocumentNode.SelectSingleNode("??????");

2 个答案:

答案 0 :(得分:2)

/div[@class='top']/p[.='Blah.']/following-sibling::node()

/div[@class='top']/node()[not(self::p)]

答案 1 :(得分:1)

您想要提取什么,节点或字符串?

如果您想要节点,"I want <em>this</em> text."是一个XML片段,由两个文本节点的顶层和一个<em>元素组成,它有一个文本节点子节点。由于顶层有多个节点,因此您需要使用SelectNodes("xpath expression a la @Alejandro")而不是SelectSingleNode()来提取它们。

如果你想要一个字符串,你需要再次使用SelectNodes();然后遍历所选节点并连接每个节点的outerHTML。请参阅here以获取类似内容的良好示例。

此外,从您的示例中有点不清楚XPath表达式通常会为您提供所需内容。例如。你想要在<p>...</p>下的最初<div class="top">之后的所有内容吗?或者您希望除{em>所有 <div>元素之外的<p>下的所有文字?或者别的什么?当然,如果@Alejandro的XPath表达式适合你,那么它已经足够明确了。