2012-08-22 6 views
0

J'ai deux noeuds qui ont HTML interne qui ressemble à ceci:HtmlAgilityPack - Remplacer nœud avec un autre nœud

Noeud1:

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

Je suis en train pour rechercher Node1 dans Node2 afin d'ajouter <!--more--> tag (pour les messages WordPress) suivant les deux premiers paragraphes (ou quel que soit le texte HTML fourni dans Node1).

Les deux nœuds ci-dessus ont des parents différents. Comment trouver et remplacer ou ajouter le tag <!--more--> dans un tel cas? J'ai essayé de courir le code suivant, mais il des erreurs sur:

code:

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

Erreur:

Node " 

      " was not found in the collection 
Parameter name: node 

également essayé chaging node1 dans la partie oldChild à HtmlNode.CreateNode(node1.InnerHtml) mais cela ne fonctionne pas non plus.

Répondre

2

Je pense qu'il serait plus facile d'effectuer un remplacement sur HtmlNode.InnerHtml propriété directement:

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

Merci, Alex. J'ai dû ajouter quelques niveaux de 'Trim' (pour se débarrasser des espaces de début de ligne), mais je l'ai fait en utilisant' Replace'. – Zishan

0

Je ne sais pas pourquoi le remplacement ne fonctionne pas, mais il y a une méthode InsertAfter 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); 
+0

Merci, Shriek. Mais cela ne fonctionne que pour insérer la balise '' après le deuxième paragraphe. Comme node1 et node2 sont dynamiques, je dois rechercher manuellement quelques milliers de paires pour vérifier où insérer. – Zishan

Questions connexes