HtmlAgilityPackいくつかのタグ間でhtmlを抽出する方法

c# html-agility-pack

質問

私は1つのhtmlからすべての段落を抽出し、そのタグ間のすべてのテキストも抽出する必要があります。

HtmlDocumentに解析されたテキストが元のものから変更された場合、このコードは機能しません。サンプル

some <br />text

変更された

some <br />text

es:

some <br />text

正しい結果は次のようになります。

some <br />text

上記のコードはこれを返します:

some <br />text

その理由は、steamPositionは、元のテキストに関連するノードの位置を返すのであって、htmlDocumentのそれを解析したものではありません。

解析されたhtmlに関連する1つのノードの位置を返す方法はありますか?

受け入れられた回答

<p>要素のOuterHtmlプロパティを使用して、目的のHTMLを取得できます。

string s = "<p>firt paragraph</p>some <br />text<p>another paragraph</p><span>some text between span</span><p>hellow word</p>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var nodes = doc.DocumentNode.SelectNodes("//p");
foreach (var item in nodes)
{
    Console.WriteLine(item.OuterHtml);
}

出力:

string s = "<p>firt paragraph</p>some <br />text<p>another paragraph</p><span>some text between span</span><p>hellow word</p>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var nodes = doc.DocumentNode.SelectNodes("//p");
foreach (var item in nodes)
{
    Console.WriteLine(item.OuterHtml);
}

あなたが最初の間のすべてを取得することを意味している場合や<p>と最後の<p>要素には、包括的には、次のXPathを使用することができます。

string s = "<p>firt paragraph</p>some <br />text<p>another paragraph</p><span>some text between span</span><p>hellow word</p>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var nodes = doc.DocumentNode.SelectNodes("//p");
foreach (var item in nodes)
{
    Console.WriteLine(item.OuterHtml);
}

XPathは、前の兄弟p持ち、兄弟p後にある、またはノード自体がp要素であるすべてのノード(要素またはテキストノードのいずれか)を取得します。

string s = "<p>firt paragraph</p>some <br />text<p>another paragraph</p><span>some text between span</span><p>hellow word</p>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var nodes = doc.DocumentNode.SelectNodes("//p");
foreach (var item in nodes)
{
    Console.WriteLine(item.OuterHtml);
}

出力:

string s = "<p>firt paragraph</p>some <br />text<p>another paragraph</p><span>some text between span</span><p>hellow word</p>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var nodes = doc.DocumentNode.SelectNodes("//p");
foreach (var item in nodes)
{
    Console.WriteLine(item.OuterHtml);
}



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ