HtmlAgilityPack remplacer nœud
Je veux remplacer un nœud avec un nouveau nœud. Comment puis-je obtenir la position exacte du nœud et de faire une complète remplacer?
J'ai essayé le suivant, mais je ne peux pas compris comment faire pour obtenir l'indice du nœud ou qui nœud parent pour appeler ReplaceChild()
.
string html = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);
var bolds = document.DocumentNode.Descendants().Where(item => item.Name == "b");
foreach (var item in bolds)
{
string newNodeHtml = GenerateNewNodeHtml();
HtmlNode newNode = new HtmlNode(HtmlNodeType.Text, document, ?);
item.ParentNode.ReplaceChild( )
}
OriginalL'auteur Omar | 2011-07-21
Vous devez vous connecter pour publier un commentaire.
Pour créer un nouveau nœud, utilisez le
HtmlNode.CreateNode()
méthode de fabrique, ne pas utiliser le constructeur directement.Ce code devrait fonctionner pour vous:
Noter que nous avons besoin d'appeler
ToList()
sur la requête, nous allons modifier le document de sorte qu'il serait un échec si nous n'avons pas.Si vous souhaitez remplacer avec cette chaîne:
Le problème est qu'il n'est plus un nœud unique, mais une série de nœuds. Vous pouvez analyser amende à l'aide
HtmlNode.CreateNode()
mais en fin de compte, vous êtes seulement en référence le premier nœud de la séquence. Vous devez remplacer à l'aide du nœud parent.newNodeStr='some text <b>node</b> <strong>another node</strong>'
, le foyer ne fonctionne pas.Mis à jour. Si vous analyser cette chaîne à l'aide de
HtmlNode.CreateNode()
, il en résultera la création d'une référence vers le premier nœud. Donc, si vous avez remplacé avec que, vous feriez seule la première s'être remplacé. En fait, vous devez remplacer leParentNode
d'attraper tous les.Après réflexion, il pourrait être sûr de toujours utiliser
ParentNode
depuis un nouveau, seul nœud parent est effectivement lui-même lorsque vous faites des remplacements.cela ne marchera pas si l'élément a de multiples balises, par exemple. <em><strong>test</strong></em>
Il ne vous... avez-vous fait ?
OriginalL'auteur Jeff Mercado
Je suis en utilisant
HtmlDocument.DocumentNode
pour le nouvellement généré nœud.OriginalL'auteur vicancy