2013-03-26 10 views
5

ho una struttura con elementi ricorrenti come questo:Come usare XPath per trovare l'antenato più vicino in un antenato-or-self nodelist

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

Asuming il c-nodo è il $ nodoCorrente, quando uso XPath

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

Ottengo un elenco non ordinato di nodi che corrispondono all'espressione. Quello di cui ho bisogno è di ottenere sempre il nodo più vicino all'albero, come nel più profondo dei rami o il più alto @ livello.

non posso usare XPath 2 max-funzione come questa, purtroppo:

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

Si noti che la più vicina a-nodo non sempre è esattamente al di sopra del contesto, solo un posto lassù ...

Qualsiasi suggerimenti apprezzati!

saluti Alex

risposta

6

Credo che si ottiene un insieme ordinato di nodi, da genitore a antenato.

Provare $currentNode/ancestor-or-self::a[1] per ottenere il genitore di c att = "val".

+0

Ho provato questo approccio. Elencando il primo, il secondo ecc. E trovo il nodo più vicino al secondo posto ... :( – Alex

+0

Sei sicuro $ currentNode = elemento c? – Istao

+0

Sì, ma forse ottengo questo effetto perché il mio XPath attuale è "antenato" -o-self :: */a "e non solo a ?? (l'ho semplificato per chiarire le cose) – Alex

Problemi correlati