0

次のような内部HTMLを持つ2つのノードがあります。

ノード1:

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

Node2:

<p>some text</p>
<p>some more text</p>
<div><p>lots of more paragraphs here</p></div>

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

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

コード:

node2.ParentNode.ReplaceChild(HtmlNode.CreateNode(node1.InnerHtml & "<!--more-->"), node1).InnerHtml

エラー:

Node "

             " was not found in the collection
Parameter name: node

またnode1、oldChildの部分をに変更しようとしましHtmlNode.CreateNode(node1.InnerHtml)たが、それも機能しませんでした。

4

2 に答える 2

3

HtmlNode.InnerHtmlプロパティを直接置き換える方が簡単だと思います。

node2.InnerHtml = node2.InnerHtml.Replace(
    node1.InnerHtml, 
    node1.InnerHtml + "<!--more-->"
);
于 2012-08-22T22:01:11.257 に答える
0

置換が機能しない理由はわかりませんが、使用できる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 );
于 2012-08-22T22:01:46.127 に答える