HtmlAgilityPack - Sostituisci nodo con un altro nodo

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

Domanda

Ho due nodi che hanno HTML interno che va in questo modo:

node1:

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

Nodo2:

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

Sto cercando di cercare Nodo1 nel Nodo2 per aggiungere il <!--more--> (per i post di WordPress) seguendo i primi due paragrafi (o qualunque testo HTML sia fornito nel Nodo1).

Entrambi i nodi sopra hanno genitori diversi. Come faccio a trovare e sostituire o altrimenti aggiungere il <!--more--> in questo caso? Ho provato a eseguire il seguente codice, ma si sbaglia:

Codice:

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

Errore:

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

Ho anche provato a rintracciare node1 nella parte oldChild su HtmlNode.CreateNode(node1.InnerHtml) ma non ha funzionato neanche.

Risposta accettata

Penso che sarebbe più facile eseguire una sostituzione direttamente sulla proprietà HtmlNode.InnerHtml :

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

Risposta popolare

Non sei sicuro del motivo per cui la sostituzione non funziona, tuttavia esiste un metodo InsertAfter che puoi utilizzare.

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché