2011-09-07 50 views

Respuesta

7

Puede utilizar not(ancestor::*).

Ejemplo de uso:

<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

Dos requisitos: (a) esto está bien para XSLT 1.0, donde el nodo raíz es siempre el nodo del documento; no está bien para 2.0, donde el nodo raíz podría ser un nodo de elemento (o incluso un atributo o nodo de texto). (b) El código proporcionado está bien, excepto por el mensaje. Un comentario o instrucción de procesamiento que es un elemento secundario del nodo raíz (documento) satisfará la prueba, pero producirá un mensaje espurio. –

+0

Nice xpath para identificar el elemento raíz, +1 –

7

En XPath 1.0 (XSLT 1.0):

not(parent::*) 

O puede usar:

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

En XPath 2.0 (XSLT 2.0):

.. is root() 
Cuestiones relacionadas