XPath-Problem, das Abrufen von "Ausdruck muss zu einem Knotensatz ausgewertet werden." Error

.net c# html-agility-pack node-set xpath

Frage

Ich habe Probleme beim Abrufen eines einzelnen Knotens durch seinen expliziten XPath, den ich bereits auf andere Weise gefunden habe. Ich habe Knoten und ich kann seinen XPath bekommen, aber wenn ich versuche, denselben Knoten wieder dieses Mal über node.XPath abzurufen, gibt es den "Ausdruck muss zu einem Knotensatz" Fehler auswerten. Sollte das nicht funktionieren? Ich verwende HtmlAgilityPack in C # btw für das HtmlDocument.

HtmlDocument doc = new HtmlDocument();
doc.Load(@"..\..\test1.htm");
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//node()[@id='something')])[first()]");
HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath);

BTW: Dies ist der Wert von node.XPath:

"/html[1]/body[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tr[1]/td[1]/div[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[4]/div[2]/div[1]/div[1]/div[4]/#text[2]"

Akzeptierte Antwort

Ich konnte es erreichen, indem ich #text durch die Funktion text () ersetzte. Ich bin mir nicht sicher, warum es den XPath nicht einfach so ausgegeben hat.

HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath.Replace("#text","text()");

Beliebte Antwort

Ihr XPath endet in "#text [2]", was "das zweite Attribut 'text'" bedeutet. Attribute sind keine Knoten, sie sind Knotenmetadaten.
Dies ist ein häufiges Problem, das ich mit XPath hatte: Ich möchte den Wert eines Attributs haben, während die XPath-Operation unbedingt einen Knoten extrahieren muss.

Die Lösung, die ich dafür verwendet habe, besteht darin, meinen XPath-Abruf mit etwas zu umbrechen, das den Attributteil der Zeichenfolge erkennt und ausstreift (über einen Methodenaufruf myXPathString.LastIndexOf (#)) und dann den abgeschnittenen myXPathString verwendet Knoten und sammeln Sie den gewünschten Attributwert als zweiten Schritt.

Ich hoffe, das hilft,
J




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