HtmlAgilityPack - Ersetze Knoten durch einen anderen Knoten

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

Frage

Ich habe zwei Knoten mit innerem HTML, die ungefähr so ​​aussehen:

Knoten1:

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

Knoten2:

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

Ich versuche, Node1 in Node2 nachzuschlagen, um das <!--more--> -Tag (für WordPress-Posts) nach den ersten beiden Absätzen hinzuzufügen (oder was auch immer HTML-Text in Node1 liefert).

Beide der oben genannten Knoten haben unterschiedliche Eltern. Wie kann ich in einem solchen Fall das <!--more--> -Tag finden und ersetzen oder anderweitig anhängen? Ich habe versucht, den folgenden Code auszuführen, aber es ist fehlerhaft:

Code:

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

Error:

Node "

             " was not found in the collection
Parameter name: node

Auch versucht chaging node1 im oldChild Teil zu HtmlNode.CreateNode(node1.InnerHtml) , aber das hat nicht funktioniert.

Akzeptierte Antwort

Ich denke, es wäre einfacher, eine Ersetzung auf der HtmlNode.InnerHtml Eigenschaft direkt HtmlNode.InnerHtml :

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

Beliebte Antwort

Nicht sicher, warum das Ersetzen nicht funktioniert, jedoch gibt es eine InsertAfter-Methode, die Sie verwenden können.

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 );


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum