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>
<div><p>lots of more paragraphs here</p></div>
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:
node2.ParentNode.ReplaceChild(HtmlNode.CreateNode(node1.InnerHtml & "<!--more-->"), node1).InnerHtml
Erreur:
Node "
" was not found in the collection
Parameter name: node
Nous node1
également essayé de modifier node1
dans la partie oldChild avec HtmlNode.CreateNode(node1.InnerHtml)
mais cela ne fonctionnait pas non plus.
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-->"
);
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 );