HtmlAgilityPack - ノードを別のノードに置き換える

asp.net c# html-agility-pack vb.net

質問

私はこのような何かに行く内部HTMLを持っている2つのノードがあります:

Node1:

<p>some text</p>
<p>some more text</p>

ノード2:

<p>some text</p>
<p>some more text</p>

最初の2つの段落(またはNode1で提供されるHTMLテキスト)に続いて<!--more-->タグ(WordPressの投稿用)を追加するために、Node2でNode1を検索しようとしています。

上記のノードの両方には異なる親があります。この場合、 <!--more-->タグを見つけて置き換えたり、追加したりするにはどうしたらいいですか?次のコードを実行しようとしましたが、エラーが発生しました:

コード:

<p>some text</p>
<p>some more text</p>

エラー:

<p>some text</p>
<p>some more text</p>

また、oldChild部分のnode1HtmlNode.CreateNode(node1.InnerHtml)HtmlNode.CreateNode(node1.InnerHtml)しようとしましたが、それもうまくHtmlNode.CreateNode(node1.InnerHtml)ませんでした。

受け入れられた回答

私は、 HtmlNode.InnerHtmlプロパティの置換を直接行うほうが簡単だと思います:

node2.InnerHtml = node2.InnerHtml.Replace(
    node1.InnerHtml, 
    node1.InnerHtml + "<!--more-->"
);

人気のある回答

置き換えがうまくいかない理由はわかっていますが、使用できるInsertAfterメソッドがあります。

const string html = @"<p>some text</p>
<p>some more text</p>
<div><p>lots of more paragraphs here</p></div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var secondParagraph = doc.DocumentNode.SelectSingleNode("//p[2]");
// var secondParagraph = doc.DocumentNode.Descendants("p").Skip(1).First(); //or Linq
var moreNode= HtmlNode.CreateNode("<!--more-->");
doc.DocumentNode.InsertAfter(moreNode,secondParagraph );



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