Entfernen eines HtmlNode innerhalb eines HtmlNode mit dem HtmlAgilityPack

c# html html-agility-pack nodes removechild

Frage

Wie entferne ich den Zahlenknoten sowie dessen Wert aus dem Haus?

Dokument :

<number>123456</number>
<house> <number> </number>Red</house>
<house> <number>12</number>Blue</house>
<number>345345</number>
etc...

Code:

private void getHouse(string houseHtml)
{
    HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.Load(new System.IO.StringReader(houseHtml));

    foreach (HtmlAgilityPack.HtmlNode house in htmlDoc.DocumentNode.SelectNodes("//house"))
    {
        MessageBox.Show(house.InnerText);
    }
}

Ergebnis:

 Red
12Blue

Erforderliches Ergebnis

Red
Blue

Ich habe versucht zu verwenden:

house.RemoveChild(house.SelectSingleNode("//number"));

und einige andere Kombinationen davon und führen zu einem "Knoten wurde nicht in der Sammlung gefunden" oder nichts wird passieren. Es wird auch die oberste Nummer ausgewählt, nicht die Nummer innerhalb des Haus-Tags.

Akzeptierte Antwort

Warum entfernst du die Knoten nicht direkt?

var numbers = htmlDoc.DocumentNode.SelectNodes("//house/number");
if (numbers != null) {
    foreach(var node in number) 
        node.Remove();
}

Der Grund dafür, dass Ihr XPath alle Knoten auswählt, ist, dass Sie einen Pfad relativ zum aktuellen Knoten angeben müssen:

house.SelectSingleNode("//number"); // wrong
house.SelectSingleNode(".//number"); // right


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow