Weiß jemand, wie man mit xpath die Position eines Knotens ermittelt?
Angenommen, ich habe die folgende XML:
<a>
<b>zyx</b>
<b>wvu</b>
<b>tsr</b>
<b>qpo</b>
</a>
Ich kann die folgende xpath-Abfrage verwenden, um den dritten <b> -Knoten (<b> tsr </ b>) auszuwählen:
a/b[.='tsr']
Welches ist alles schön und gut , aber ich möchte zurückkehren , die Ordnungsposition des Knotens, so etwas wie:
a/b[.='tsr']/position()
(aber ein bisschen mehr arbeiten!)
Ist es überhaupt möglich?
edit : Ich habe vergessen zu erwähnen, dass ich .net 2 benutze, also ist es xpath 1.0!
Update : Beendet mit bis James Sulak ‚s ausgezeichnete Antwort . Für diejenigen, die interessiert sind, hier ist meine Implementierung in C #:
int position = doc.SelectNodes("a/b[.='tsr']/preceding-sibling::b").Count + 1;
// Check the node actually exists
if (position > 1 || doc.SelectSingleNode("a/b[.='tsr']") != null)
{
Console.WriteLine("Found at position = {0}", position);
}
Antworten:
Versuchen:
quelle
Sie können dies mit XSLT tun, aber ich bin mir bei XPath nicht sicher.
quelle
Mir ist klar, dass die Post uralt ist .. aber ..
Wenn Sie das Sternchen durch den Knotennamen ersetzen, erhalten Sie bessere Ergebnisse
anstatt
quelle
Wenn Sie jemals auf XPath 2.0 aktualisieren, beachten Sie, dass es einen Funktionsindex von bietet. Es löst das Problem auf folgende Weise:
Wo:
quelle
Anders als zuvor angegeben, ist "Vorgänger-Geschwister" tatsächlich die zu verwendende Achse, nicht "Vorgänger", was etwas völlig anderes bewirkt. Es wählt alles im Dokument aus, das sich vor dem Start-Tag des aktuellen Knotens befindet. (siehe http://www.w3schools.com/xpath/xpath_axes.asp )
quelle
Nur eine Anmerkung zur Antwort von James Sulak.
Wenn Sie berücksichtigen möchten, dass der Knoten möglicherweise nicht vorhanden ist, und ihn lediglich als XPATH beibehalten möchten, versuchen Sie Folgendes, das 0 zurückgibt, wenn der Knoten nicht vorhanden ist.
quelle
Das Problem ist, dass die Position des Knotens ohne Kontext nicht viel bedeutet.
Der folgende Code gibt Ihnen die Position des Knotens in seinen übergeordneten untergeordneten Knoten an
quelle
Ich mache viele Novell Identity Manager-Sachen, und XPATH sieht in diesem Zusammenhang etwas anders aus.
Angenommen, der gesuchte Wert befindet sich in einer Zeichenfolgenvariablen namens TARGET. Dann wäre der XPATH:
Zusätzlich wurde darauf hingewiesen, dass zum Speichern einiger Zeichen Platz auch Folgendes funktionieren würde:
Ich habe auch eine schönere Version davon bei Novell's Cool Solutions veröffentlicht: Verwenden von XPATH, um den Positionsknoten zu erhalten
quelle