2013-03-26 10 views
5

ich eine Struktur mit wiederkehrenden Elementen wie diese:Wie XPath verwendet, um die nächsten Vorfahren in einer Vorfahren-or-Selbst zu finden Nodelist

<a> 
    <b> 
    <a> 
    </a> 
    </b> 
    <a> 
    <b> 
     <a> 
     <c att="val" /> 
     </a> 
    </b> 
    </a> 
</a> 

asuming den c-Knoten ist der $ currentNode, wenn ich

XPath
<xsl:value-of select="($currentNode/ancestor-or-self::a)" /> 

ich erhalte eine ungeordnete Liste von Knoten, die den Ausdruck übereinstimmen. Was ich brauche, ist, den Knoten immer am nächsten zum Baum zu bringen, wie in den Ästen oder dem höchsten Level.

Ich kann nicht XPath 2 max-Funktion wie diese leider verwenden:

<xsl:value-of select="($currentNode/ancestor-or-self::a)[max(@level)]" /> 

Beachten Sie, dass in der Nähe eines Knoten nicht immer genau über dem Kontext, nur dort irgendwo ...

All Vorschläge geschätzt!

Grüße Alex

Antwort

6

Ich glaube, Sie einen geordneten Satz von Knoten erhalten, von den Eltern auf Vorfahren.

Versuchen Sie $currentNode/ancestor-or-self::a[1], Eltern von c att = "val" zu erhalten.

+0

Ich versuchte diesen Ansatz. Auflistung der ersten, der zweiten usw. Und ich finde, der nächste Knoten ist auf dem zweiten Platz ... :( – Alex

+0

Sind Sie sicher, $ currentNode = Element c? – Istao

+0

Ja, aber vielleicht bekomme ich diesen Effekt, weil meine tatsächlichen XPath "Vorfahr ist -oder-selbst :: */a "und nicht nur a ?? (Ich habe es vereinfacht, um Dinge zu klären) – Alex

Verwandte Themen