Comment puis-je supprimer le nœud numérique ainsi que sa valeur de la maison?
Document :
<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);
}
}
Résultat:
Red
12Blue
Résultat requis
Red
Blue
J'ai essayé d'utiliser:
house.RemoveChild(house.SelectSingleNode("//number"));
et quelques autres combinaisons de cela et aboutissent à un "Nœud non trouvé dans la collection" ou rien ne se passera. Il sélectionnera également le numéro le plus haut, pas le numéro à l'intérieur de la balise maison.
Pourquoi ne supprimez-vous pas les nœuds directement?
var numbers = htmlDoc.DocumentNode.SelectNodes("//house/number");
if (numbers != null) {
foreach(var node in number)
node.Remove();
}
Quoi qu'il en soit, la raison pour laquelle votre XPath sélectionne tous les nœuds est qu'il vous faut donner un chemin relatif au nœud actuel:
house.SelectSingleNode("//number"); // wrong
house.SelectSingleNode(".//number"); // right