2011-09-28 14 views
14

Ho visto domande in cui il fratello successivo è stato applicato in base al valore di un nodo ma il mio problema è correlato al nodo stesso.Xpath/XSLT: controlla se il fratello successivo è un nodo particolare

questo è il tipo di XML devo avere:

<Employee> 
    <Summary> 
     <A> 
     <B> 
    </Summary> 
    <Elections> 
    </Elections> 
<Employee> 

ho bisogno di scrivere una condizione XPath come segue:

if (NOT(the following sibling(first sibling) of /Employee/Summary is Elections)), then do something. 

Attualmente ho:

<xsl:if test="(not(following-sibling::Employee/Summary[1]='Earnings')) 
    <xsl:call-template name="EmployeeRecord"/> 
</xsl:if> 

prega si noti che non sto controllando un valore del nodo ma il nodo stesso (cioè il nome del nodo). Qualsiasi aiuto nella giusta direzione sarà molto apprezzato.

+0

Qual è il nodo corrente? La condizione descritta non si adatta perfettamente al tuo attuale xslt. Puoi indicare a parole dove ti trovi nel documento e cosa vuoi ottenere? –

risposta

28

Sei sulla strada giusta. L'asse following-sibling viene valutato dal nodo di contesto nel passaggio precedente.

  • se siete alla ricerca per il primo elemento che è la seguente-fratello di /Employee/Summary, si può usare: /Employee/Summary/following-sibling::*[1].

  • Per valutare se il primo fratello successivo è un elemento Elections, è possibile utilizzare un filtro del predicato aggiuntivo [self::Elections].

  • Test per la negazione di che, avvolgere il tutto in not()

Mettere tutto insieme, regolando il tuo esempio:

<xsl:if test="not(/Employee/Summary/following-sibling::*[1][self::Elections])"> 
    <xsl:call-template name="EmployeeRecord"/> 
</xsl:if> 
+1

Non avevo mai visto prima la parte 'self', quindi per altri come me, con uno spazio dei nomi (ns) è:' [self :: ns: Elezioni] ' – BurnsBA

3

ho bisogno di scrivere una condizione XPath come segue :

if (NOT(the following sibling(first sibling) of /Employee/Summary is Elections)), then do something. 

Uso:

not(/Employee/Summary/following-sibling::*[1][self::Elections]) 

L'espressione XPath specificato come argomento della funzione not() seleziona qualsiasi elemento Elections che è il primo elemento following-sibling di qualsiasi Summary elemento che è un figlio dell'elemento superiore Employee.

Se questo non seleziona alcun nodo, l'espressione XPath sopra riportata è true().

Problemi correlati