我有以下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("??????");
答案 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表达式适合你,那么它已经足够明确了。