HtmlAgilityPack - Remplacer le nœud par un autre nœud

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

Question

J'ai deux nœuds qui ont HTML interne qui va à peu près comme ceci:

Node1:

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

Node2:

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

J'essaie de rechercher Node1 dans Node2 afin d'ajouter la <!--more--> (pour les publications WordPress) après les deux premiers paragraphes (ou le texte HTML fourni dans Node1).

Les deux noeuds ci-dessus ont des parents différents. Comment puis-je trouver et remplacer ou autrement ajouter la <!--more--> dans un tel cas? J'ai essayé d'exécuter le code suivant, mais il a une erreur d'erreur:

Code:

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

Erreur:

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

Nous node1 également essayé de modifier node1 dans la partie oldChild avec HtmlNode.CreateNode(node1.InnerHtml) mais cela ne fonctionnait pas non plus.

Réponse acceptée

Je pense qu'il serait plus facile de remplacer directement la propriété HtmlNode.InnerHtml :

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

Réponse populaire

Vous ne savez pas pourquoi le remplacement ne fonctionne pas, cependant il existe une méthode InsertAfter que vous pouvez utiliser.

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi