2013-01-21 29 views
9
<node> 
    <node1><node11/></node1> 
    <node2/> 
</node> 

io voglio che il mio XSLT per verificarexsl: se almeno un nodo figlio esiste

<xsl:if test="If at least 1 child node exists"> 
    Only node1 can pass the if condition 
</xsl:if> 

Grazie per qualsiasi risposta.

risposta

19

Innanzitutto, fai attenzione alla terminologia qui. Intendi "nodo" o intendi "elemento". Un nodo può essere un elemento, un commento, un testo di elaborazione-istruzione.

In ogni caso, se non intendi elemento qui, per controllare esiste almeno un elemento secondario, si può solo fare questo (supponendo che si sono posizionati sul nodo di elemento in questo caso.

<xsl:if test="*"> 

tuo commento suggerisce soltanto "node1" può passare il se la condizione, in modo da verificare l'esistenza di uno specifico elemento, fare questo

<xsl:if test="node1"> 
+0

Grazie per la risposta. Ho avuto una confusione tra questi termini. Sarà più attento la prossima volta –

3

Nel contesto del nodo che si sta testando, questo dovrebbe funzionare per verificare se un nodo ha bambino elementi:

<xsl:if test="*"> 
    Only node1 can pass the if condition 
</xsl:if> 

Se voi nodi in realtà significava (che dovrebbe includere i nodi di testo), quindi questo dovrebbe funzionare per includere i nodi di testo:

<xsl:if test="node()"> 
    Only node1 can pass the if condition 
</xsl:if> 

Ma <node> sarebbe anche superare questa prova (<node2> wouldn 't). Immaginavo che stavi parlando solo nel contesto dei nodi figli di <node>, ma forse no?

0

espressioni che corrispondono a un nodo sono truthy, mentre le espressioni che non corrispondono a nulla sono falsy, quindi:

<xsl:if test="node()"> 
    ... 
</xsl:if> 

Tuttavia, la tua domanda e la condizione implicita "Solo nodo1 può passare la se la condizione" sono in contrasto con l'esempio. Entrambi node e node1 hanno nodi figlio, quindi entrambi passerebbero questa condizione.

Per limitare rigorosamente a node1, è necessario assicurarsi che il contesto del modello sia appropriato o controllare che il nodo in questione non sia documentElement.

0

La formulazione della questione non è chiara, ma penso che si desidera solo elaborare nodi figlio che sono essi stessi ottenuto figli (cioè nipoti del nodo corrente)

<xsl:template match="node"> 
do stuff for node 
    <xsl:apply-templates select="*[*]"/> 
</xsl:template> 

sarà solo applicare i modelli di node1 in quanto ha un nodo figlio, non applicherà i modelli a node2.

Problemi correlati