Tengo un archivo de entrada que usa el espacio de nombres de mi compañía en el espacio de nombres predeterminado (xmlns="companyURL"
) pero quiero que el archivo de salida use algo distinto al espacio de nombres predeterminado (xmlns:cmp="companyURL"
). Así que construyo mi archivo utilizando el espacio de nombres cmp
, pero luego quiero copiar algunos de los elementos internos:Cambiar el espacio de nombres para el archivo XML en XSL Translation
<xsl:element name="cmp:container">
<xsl:for-each select="foo">
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:element>
Por desgracia, lo que esto hace es definir el espacio de nombres predeterminado para cada uno de esos elementos internos, por lo que el archivo increíblemente verboso y feo. Ejemplo simplificado:
Fuente:
<foo xmlns="companyURL">
<num1>asdf</num1>
<num2>ghjkl</num2>
</foo>
Se convierte en:
<cmp:container xmlns:cmp="companyURL">
<num1 xmlns="companyURL">asdf</num1>
<num2 xmlns="companyURL">ghjkl</num2>
</cmp:container>
Por supuesto, companyURL
es grande y larga y desagradable, y es el mismo en ambos lugares, por lo que lo haría prefiere que el resultado anterior sea el siguiente:
<cmp:container xmlns:cmp="companyURL">
<cmp:num1>asdf</cmp:num1>
<cmp:num2>ghjkl</cmp:num2>
</cmp:container>
¿Hay una manera fácil de hacer esto o debo convertir todo en el espacio de nombre cmp
en el espacio de nombres predeterminado? Preferiría usar el nombre de espacio de nombres explícito si es posible, ayuda a comprender el XSLT en mi experiencia.
Buena pregunta (+1). Vea mi respuesta para una solución corta y simple, :) –
* "quiero que mi archivo de salida use algo que no sea el espacio de nombres predeterminado" * >> siguiendo su ejemplo, cambiar el prefijo (o de forma predeterminada a un prefijo) no significa cambiar el espacio de nombres Los elementos, desde un punto de vista XML + NS, se mantendrán iguales (nombre local + espacio de nombre no se altera), aunque el prefijo sea diferente. – Abel
Me refería al identificador visible delante del nombre de la etiqueta. –