with w3schools for example application xml xslt namespaces

xml - w3schools - Nombres de elementos dinámicos



xslt a xml (1)

Probablemente problemas de espacio de nombres y tal vez uno con el contexto actual. Para el origen (con una declaración de espacio de nombres añadida para que sea un xml bien formado)

<svc:ElementList xmlns:svc="svc"> <svc:Element> <Year>2007</Year> </svc:Element> <svc:Element> <Year>2006</Year> </svc:Element> <svc:Element> <Year>2005</Year> </svc:Element> </svc:ElementList>

la hoja de estilos

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:svc="svc" version="1.0"> <xsl:template match="svc:ElementList"> <xsl:element name="{local-name()}"> <xsl:for-each select="svc:Element"> <xsl:element name="{concat(''NewTag'', Year)}"/> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>

le dará la salida que necesita. Tenga en cuenta que svc:Element debe seleccionarse usando el espacio de nombres prefijado y que el contexto al generar las nuevas etiquetas es svc:Element , not svc:ElementList .

Quiero transformar un documento XML. La fuente XML se ve así:

<svc:ElementList> <svc:Element> <Year>2007</Year> </svc:Element> <svc:Element> <Year>2006</Year> </svc:Element> <svc:Element> <Year>2005</Year> </svc:Element> </svc:ElementList>

Quiero convertir eso en:

<ElementList> <NewTag2007/> <NewTag2006/> <NewTag2005/> </ElementList>

La siguiente línea de código no funciona:

<xsl:element name="{concat(''NewTag'',Element/Year)}"/>

El resultado es una serie de elementos que se ven así: <NewTag> . (Sin los espacios ...)

"// Element / Year" , "./Element/Year" y "// svc: Element / Year" tampoco funcionan. Una complicación es que la etiqueta "Elemento" está en el espacio de nombres "svc" mientras que la etiqueta "Año" está en el espacio de nombres predeterminado.

Entonces, de todos modos, ¿estoy enfrentando un problema de espacio de nombres o estoy mal utilizando la función "concat ()"?