2011-09-07 15 views

risposta

7

È possibile utilizzare not(ancestor::*).

Utilizzo Esempio:

<xsl:template match="node()|@*"> 
    <xsl:if test="not(ancestor::*)"> 
     <xsl:message>The root element is "<xsl:value-of select="name()"/>".</xsl:message> 
    </xsl:if> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
+5

Due qualifiche: (a) questo è OK per XSLT 1.0, dove il nodo radice è sempre il nodo del documento; non è OK per 2.0, dove il nodo radice potrebbe essere un nodo elemento (o in effetti un attributo o nodo di testo). (b) Il codice fornito è OK tranne che per il messaggio. Un commento o un'istruzione di elaborazione che è figlio del nodo root (documento) soddisferà il test, ma produrrà un messaggio spurio. –

+0

Nice xpath per identificare l'elemento radice, +1 –

7

In XPath 1.0 (XSLT 1.0):

not(parent::*) 

Oppure si può utilizzare:

generate-id(..) = generate-id(/) 

In XPath 2.0 (XSLT 2.0):

.. is root() 
Problemi correlati