使用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表達式來提取字符串。選擇多個節點,並迭代它們以產生句子,也會很棒。

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

一般承認的答案

你想要提取什麼,節點或字符串?

如果你想要節點, "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']/p[.='Blah.']/following-sibling::node()



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因