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表記法は何ですか?編集:私は必ずしも1つのXPath式が文字列を抽出する必要はありません。複数のノードを選択し、それらを反復して文を生成すると、素晴らしいことになります。

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

受け入れられた回答

何を抽出するか、ノードまたは文字列ですか?

ノードが必要な場合は、 "I want <em>this</em> text." 2つのテキストノードの最上位にあるXMLフラグメントと、テキストノードの子を持つ<em>要素です。最上位に複数のノードがあるので、それらを抽出するためにSelectSingleNode()ではなくSelectNodes("xpath expression a la @Alejandro")を使用する必要があります。

文字列が必要な場合は、再度SelectNodes()を使用する必要があります。選択したノードを反復処理し、各ノードのouterHTMLを連結します。類似のものの良い例はここを見てください。

また、XPath式が一般的に望むものをあなたの例から少し不明瞭にしています。例えば、 <div class="top">下の最初の<p>...</p>後にすべてを望みますか?または、 すべての <p>要素を除いて<div>下にすべてのテキストを表示しますか?それとも別の何か?もちろん、@ 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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ