Holen Sie sich das n-te Kind eines Knotens mit xpath


74

Mein Beispiel für eine Eingabe-XML lautet:

<root>
 <a>
   <b>item</b>
   <b>item1</b>
   <b>item2</b>
   <b>item3</b>
   <b>item4</b>
 </a>
</root>

Ich nehme an, einen Knoten auszuwählen, bdessen Position der Wert einer Variablen ist.

Wie kann ich den Wert einer Variablen verwenden, um die Position eines Knotens zu testen?

Antworten:



54

Folgendes sollte funktionieren:

/root/a/b[2]

Und wenn nicht, versuchen Sie:

/root/a/b[position()=2]

1
Ich bin hierher gekommen, um den Unterschied zwischen diesen beiden herauszufinden. Könnten Sie bitte erklären, wie sie sich unterscheiden?
Andre

11
position()bezieht sich auf die Position im dom [2] bezieht sich auf das zweite Ergebnis in der Ergebnisliste.
Becky Conning

2
@ Andrew. Wenn sie in einer for-eachSchleifenanweisung verwendet selectwerden, sind sie gleich. Wenn position()es innerhalb der Schleife selbst verwendet wird, bezieht es sich auf die Ergebnismenge. Das [n]Format funktioniert nur als Kurzform, da es die einzige Bedingung innerhalb des [ ]Blocks ist, andernfalls position()muss wie in //a[(@id="xx") and (position()=3)]"jeder fünfte Link mit einem idvon xx" verwendet werden.
Patanjali

@Patanjali Das ist verwirrend - Links mit der Position () von 3 sind die 5. Links? Es scheint mir, dass [2] anstelle von: n-tem Typ (2) verwendet werden könnte, während [position () = 2] das Äquivalent von: n-tem Kind (2) wäre. Ich denke, wir brauchen ein paar Beispiele, um den Nebel zu beseitigen.
Bitoolean

@Patanjali Ich glaube, ich habe den Teil verstanden, dass es eine Abkürzung ist, nachdem ich es getestet habe, und es gibt mir nur das "item1", indem ich \\*[2]und \\*[position()=2]gegen das XML der Frage laufe . Vielen Dank!
Bitoolean
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.