HtmlAgilityPack - Supprimer tous les nœuds d'une collection

c# html html-agility-pack windows-runtime windows-store-apps

Question

J'essaie de corriger ce code HTML imbriqué que j'obtiens en utilisant contentEditable

<span lang="">
   <p>line one</p>
   <p>line two</p>
</span>

Je veux remplacer chacun de ces nœuds span par ses enfants

<span lang="">
   <p>line one</p>
   <p>line two</p>
</span>

Voici ce que j'ai essayé.

<span lang="">
   <p>line one</p>
   <p>line two</p>
</span>

Cela lève une System.ArgumentOutOfRangeException avec le message suivant.

<span lang="">
   <p>line one</p>
   <p>line two</p>
</span>

Je comprends pourquoi cela se passe. La modification du document annule ma collection d’éléments span . Alors, comment s'y prendre?

Aussi, comment puis-je gérer un texte qui n'est pas contenu dans un enfant? Supposons que j'ai trouvé cet élément

<span lang="">
   <p>line one</p>
   <p>line two</p>
</span>

Comment est-ce que je dés-niche cela?

VEUILLEZ NOTER: C’est HtmlAgilityPack pour WinRT , donc SelectSingleNode et toutes les commandes xpath ne sont pas disponibles

Réponse acceptée

En ce qui concerne votre problème, le correctif consiste à appeler InsertBefore partir du nœud parent , et non de la racine du document .

De plus, je pense que vous pouvez directement " déplacer " des nœuds sans en créer de nouveaux:

foreach (var span in spans)
{
    foreach (var child in span.ChildNodes)
    {
        span.ParentNode.InsertBefore(child, span);
    }
    span.Remove();
}



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