2017-08-30 3 views
0

Ich möchte alle Knoten entlang eines gefundenen Pfades in einem XML finden (binden). Betrachten Sie das folgende XML-Snippet.Wie binde ich Knoten an Variablen in XPath?

<a at="dat1"> 
    <b at="dat2"> 
     <c at="dat3">blah</c> 
     <c at="dat4">blah</c> 
    </b> 
    <b at="dat5"> 
     <c at="dat6">blah</c> 
     <c at="dat7">blah</c> 
    </b> 
</a> 
<a at="dat8"> 
    <b at="dat2"> 
     <c at="dat4">blah</c> 
     <c at="dat9">blah</c> 
    </b> 
    <b at="dat10"> 
     <c at="dat9">blah</c> 
     <c at="dat4">blah</c> 
    </b> 
</a> 

die XPath-Abfrage/a/b [@ at = "dat2"]/c [@ at = "DAT4"] wird nur zwei c-Knoten zurück. Ich möchte jedoch alle Knoten entlang der Pfade (a, b und c) abrufen, die die gegebenen Bedingungen erfüllen. In diesem Fall erwarte ich zwei Tripel von a, b, c Knoten. Der Xpath-Ausdruck könnte beliebig komplex sein. Die Xpath-Engine hätte die Tripel gefunden, aber nur die c-Knoten zurückgegeben.

Ich kann natürlich mehrere Xpath-Ausdrücke schreiben, um jedes Element zu bekommen. Dies erfordert jedoch, dass die Xpath-Engine mehrere Male sucht, was nicht wirklich notwendig ist, da sie bereits alle Bindungen in der ersten Suche gefunden hat.

Wie erreiche ich das in xpath? Wenn es nicht möglich ist, welche XML-Anfragesprache soll ich verwenden?

+0

Was hast du bisher gemacht? Hast du wenigstens gegoogelt? – Reborn

+0

@Reborn Ich habe Google vor dem Posten der Frage googelt, aber keine Lösung gefunden. Ich erkannte, dass die Frage nicht klar genug war, daher habe ich sie bearbeitet. Ich hoffe, das hilft. –

Antwort

1

Versuchen unter XPath

/a/descendant-or-self::* 

Es sollten Sie a Element zurückgeben sowie b und c

Sie können unten Fall verwenden, wenn a mehr Nachkommen hat als nur b und c:

//a/descendant-or-self::*[name()=('a', 'b', 'c')] 
2

Verwenden Sie die XPath axisancestor-or-self. Es ...

Wählt alle Vorfahren (Eltern, Großeltern, etc.) des aktuellen Knotens und den aktuellen Knoten selbst

So /a/b/c/ancestor-or-self::* alle drei Knoten wählt.

Verwandte Themen