2009-07-30 11 views
0

Wir verwenden XPath in einer Java-App und ich frage mich: Wie wähle ich eine Reihe von Knoten, wo der "Endpunkt" ist ein Knoten nicht der gleichen Art wie Geschwister.Wählen Sie Knotenbereiche mit XPath

Zum Beispiel habe ich zwei Sätze von <a> Tags der Größe 3 und 2 aus dem Beispiel unten erhalten möchten:

<sample> 
    <a /> 
    <a /> 
    <a /> 
    <terminating /> 
    <a /> 
    <a /> 
</sample> 
+0

Ich kann nicht Ihr Beispiel sehen. Bitte posten Sie eine vollständige (oder in sich selbst abgeschlossene) XML-Datei. – TahoeWolverine

+0

Post behoben. @ola_user: Sehen Sie sich die Editor-Hilfe auf der rechten Seite des Bildschirms für Ihren nächsten Post an. :) – Tomalak

Antwort

1

Vor allem das Ergebnis einer XPath-Ausdruck ist immer entweder ein atomarer Wert, oder ein einzelner Knotensatz (oder eine Sequenz in XPath 2.0). Sie können keine Liste von Knoten-Sets erhalten.

das gesagt ist, für Ihre spezifische Beispiel mit nur zwei Gruppen und ein Terminator, können Sie einfach verwenden preceding-sibling und following-sibling:

/sample/terminating/preceding-sibling::a 
/sample/terminating/following-sibling::a 
0

Erweiterung auf Pavel Minaev Antwort - ich würde eine Schleife schreiben, wie folgt aus (“ i "ist der Schleifenindex):

  • finden Sie alle <terminating> Knoten mit Hilfe von
    /sample/terminating
  • für jeden von ihnen, finden Sie alle
    ./preceding-sibling::a[count(preceding-sibling::terminating) = {i}]
  • für den letzten <terminating> Knoten, finden auch die
    ./following-sibling::a
+1

Ich denke, es könnte noch einfacher gemacht werden - gegeben "$ i", wäre es nur '/ Beispiel/a [Anzahl (vorhergehende-Geschwister :: terminierende) = $ i - 1]', um alle "a" zu bekommen in '$ i'th Gruppe. –

+0

Sie haben Recht, das würde das gleiche Ergebnis geben. Die Komplexität ist jedoch ungefähr gleich. – Tomalak

Verwandte Themen