2013-03-26 13 views
5

Mam strukturę z powtarzających się elementów tak:Jak używać XPath aby znaleźć najbliższy przodek w ancestor-or-self NodeList

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

Asuming C-węzeł jest $ currentNode, gdy używam XPath

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

Otrzymuję nieuporządkowaną listę węzłów odpowiadającą wyrażeniu. Potrzebuję zawsze, aby węzeł był najbliżej drzewa, tak jak najgłębiej w gałęziach lub na najwyższym poziomie @.

nie mogę używać XPath 2 max-funkcję jak to niestety:

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

Zauważ, że najbliżej a-węzeł nie zawsze jest dokładnie powyżej kontekstu, tylko gdzieś tam ...

Wszelkie sugestie doceniane!

Pozdrowienia Alex

Odpowiedz

6

Chyba masz uporządkowany zbiór węzłów, z rodzica na przodku.

Wypróbuj $currentNode/ancestor-or-self::a[1], aby uzyskać rodzica c att = "val".

+0

Próbowałem tego podejścia. Wymieniając pierwszy, drugi itd. I uważam, że najbliższy węzeł znajduje się na drugim miejscu ... :( – Alex

+0

Czy jesteś pewien, że $ currentNode = element c? – Istao

+0

Tak, ale może dostaję ten efekt, ponieważ mój aktualny XPath jest "przodkiem" -or-self :: */a "a nie tylko? (uprościłem to, by wyczyścić) – Alex

Powiązane problemy