2009-08-03 13 views
7

Sto modificando un modello XSLT e le mie capacità sono un po 'arrugginite.test xslt per vedere se un nodo è uno dei primi figli X del suo genitore

Vorrei scrivere una condizione per verificare se il nodo corrente si trova nei primi tre nodi figlio del padre.

<parent> 
<child> 
<child> 
<child> 
<child> 
</parent> 

Così i primi tre elementi figlio sopra otterrebbe true, ma il quarto sarebbe return false, a complicare le cose gli elementi figli non saranno tutti essere lo stesso e avranno discendenti dei loro propri. Sono sicuro che ci sarà un semplice xpath che lo farà.

risposta

17

Dipende dalla situazione. Se siete nel bel mezzo di

<xsl:apply-templates select="/parent/child" /> 

Poi controllando con

<xsl:if test="position() &lt; 4"> 

farà. Se ci si trova in un altro contesto, uno che non interessa tutti gli elementi <child>, allora position() farà riferimento alla posizione all'interno di del contesto.

Se si desidera un controllo context-free, è possibile utilizzare:

<xsl:if test="count(preceding-sibling::child) &lt; 3"> 
<!-- or --> 
<xsl:if test="count(preceding-sibling::*) &lt; 3"> 

To selezionare solo i primi tre <child> elementi, questo sarebbe:

/parent/child[position() &lt; 4] 
+1

Grande risposta grazie –

0

Chiamare la funzione position() per determinare dove esiste un nodo in un documento.

Problemi correlati