使用HtmlAgilityPack从节点获取文本

c# html-agility-pack xpath

我有以下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("??????");

一般承认的答案

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

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

如果你想要一个字符串,你需要再次使用SelectNodes();然后迭代选定的节点并连接每个节点的outerHTML。 在这里看到类似的一个很好的例子。

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


热门答案

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

要么

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


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow