2008-12-15 65 views

Respuesta

23

Creo que desea recuperar el nombre del elemento XML más externo. Esto se puede hacer como en el siguiente ejemplo de XSL:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:variable name="outermostElementName" select="name(/*)" /> 

    <xsl:template match="/"> 
    <xsl:value-of select="$outermostElementName"/> 
    </xsl:template> 
</xsl:stylesheet> 

Tenga en cuenta que hay una ligera diferencia en la terminología XPath:

La parte superior del árbol es un nodo raíz (1,0 terminología) o documento nodo (2.0). Esto es a lo que se refiere "/". No es un elemento: es el padre del elemento más externo (y cualquier comentarios e instrucciones de procesamiento que preceden o siguen al elemento más externo). El nodo raíz no tiene nombre.

Ver http://www.dpawson.co.uk/xsl/sect2/root.html#d9799e301

2

Lo he entendido. El nombre de la función() dado el parámetro * devolverá foo.

0

que quieren local-name()

+1

@annakata: name() y local-name() son diferentes. El OP claramente quiere nombre(). En ninguna parte dice que quiere borrar el nombre de cualquier prefijo del espacio de nombres. –

+0

Para ser justos me refiero a "esto hará lo que quieras" no "solo esto ..." y en ninguna parte del OP dice que quiere el espacio de nombres tampoco. No sé ustedes, pero en mi experiencia el nombre local es lo que me interesa el 90% o más del tiempo. espacios de nombres son una de las razones por las que la gente odia XSLT – annakata

16

utilizar la función XPath name().

Una expresión XPath para obtener el nombre de la parte superior (no como root!) Elemento es:

            función   name(/*)

El nombre() devuelve el totalmente calificado nombre del nodo, por lo que para un elemento <bar:foo/> se devolverá la cadena "bar: foo".

En caso de que solo se desee la parte local del nombre (sin prefijo y ":"), se debe utilizar la función XPath local-name().

Cuestiones relacionadas