HtmlAgilityPack - Entfernen aller Knoten in einer Sammlung

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

Frage

Ich versuche, diesen seltsamen verschachtelten HTML- contentEditable ich mit contentEditable

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

Ich möchte jede dieser ersetzen span Knoten mit seinen Kindern

<p>line one</p>
<p>line two</p>

Folgendes habe ich versucht.

var spans = doc.DocumentNode.Descendants().Where(x => x.Name == "span" && x.Attributes["lang"] != null).ToList();
foreach (var span in spans)
{
    foreach (var child in span.ChildNodes)
    {
        var ch = doc.CreateElement(child.Name);
        ch.InnerHtml = child.InnerHtml;
        doc.DocumentNode.InsertBefore(ch, span);
    }            
    span.Remove();
}

Das System.ArgumentOutOfRangeException eine System.ArgumentOutOfRangeException mit der folgenden Nachricht aus.

Node "<span lang=""></span>" was not found in the collection

Ich verstehe, warum das passiert. Durch das Bearbeiten des Dokuments wird meine Sammlung von span Elementen span . Also, wie geht das?

Wie komme ich mit Text zurecht, der nicht in einem Kindknoten enthalten ist? Angenommen, ich habe dieses Element gefunden

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

Wie entarre ich das?

BITTE HtmlAgilityPack : Dies ist HtmlAgilityPack für WinRT , daher sind SelectSingleNode und alle Xpath-Befehle für mich nicht verfügbar

Akzeptierte Antwort

Was Ihr Problem InsertBefore sollte die Korrektur darin bestehen, InsertBefore vom übergeordneten Knoten und nicht vom Dokumentenstamm aufzurufen.

Außerdem denke ich, dass Sie Knoten direkt " verschieben " können, ohne neue zu erstellen:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum