Tengo un documento XML con elementos no espaciados, y deseo usar XSLT para agregarles espacios de nombres. La mayoría de los elementos estarán en el espacio de nombres A; algunos estarán en el espacio de nombres B. ¿Cómo hago esto?Agregue un espacio de nombres a los elementos
Respuesta
Con foo.xml
<foo x="1">
<bar y="2">
<baz z="3"/>
</bar>
<a-special-element n="8"/>
</foo>
y foo.xsl
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates match="children()"/>
</B:a-special-element>
</xsl:template>
</xsl:transform>
consigo
<foo xmlns="A" x="1">
<bar y="2">
<baz z="3"/>
</bar>
<B:a-special-element xmlns:B="B"/>
</foo>
es eso lo que está buscando?
Esto es lo que tengo hasta ahora:
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates />
</B:a-special-element>
</xsl:template>
Esto casi funciona; el problema es que no está copiando atributos. Por lo que he leído hasta ahora, xsl: element no tiene una forma de copiar todos los atributos del elemento tal como está (use-attribute-sets no parece cortarlo).
No ha leído la documentación correcta. Usa la fuerza, lee las especificaciones, está muy bien escrito y accesible. – ddaa
Necesitará dos ingredientes principales para esta receta.
El stock de salsa será el identity transform, y el sabor principal estará dado por el atributo namespace
en xsl:element
.
El siguiente código, no probado, debe agregar el espacio de nombre http://example.com/ a todos los elementos.
<xsl:template match="*">
<xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Mensaje personal: Hola, Jeni Tennison. Sé que estás leyendo esto.
- 1. Symfony 2: Agregue otro espacio de nombres a Entity namespaces
- 2. Agregue un onBlur a todos los elementos de formulario
- 3. WPF - globalmente agregue la declaración del espacio de nombres xaml
- 4. espacio de nombre tag0 agregado para los elementos en el espacio de nombres predeterminado
- 5. Agregue un espacio de nombres en un xml generado por una consulta
- 6. Nombres de elementos dinámicos
- 7. "plantillas" un espacio de nombres
- 8. Espacio de nombres agnóstico Consulta XPath con contenido de elementos
- 9. Agregue dinámicamente elementos a una listaVer Android
- 10. Regla de espacio de nombres
- 11. XSD con elementos del otro espacio de nombres
- 12. Espacio de nombres para [DataContract]
- 13. PHP: Los espacios de nombres en un único archivo con un espacio de nombres global
- 14. Agregue automáticamente un prefijo a los nombres de columna para las clases @Embeddable
- 15. constructores dentro de un espacio de nombres
- 16. ¿A qué espacio de nombres pertenece Response.Redirect?
- 17. transformación XSLT - nombres de los elementos dinámicos
- 18. agregando un espacio de nombres personalizado a xaml
- 19. Agregue espacio entre elementos en un ListBox WPF/Silverlight sin espacio arriba primero o debajo del último
- 20. JavaScript Espacio de nombres
- 21. SuppressMessage para un espacio de nombres completo
- 22. Mejores prácticas: ¿usar espacio de nombres o volver a abrir el espacio de nombres?
- 23. Agregar espacio de nombres a un documento XML ya creado
- 24. "Prefijo 'x' no se asigna a un espacio de nombres"
- 25. Crear un alias a otro espacio de nombres Clojure
- 26. ¿Debería estar en un espacio de nombres?
- 27. clojure: ¿agregar un seguimiento de depuración a cada función en un espacio de nombres?
- 28. plantilla especializada en un espacio de nombres
- 29. Agregue nombres de columnas mediante programación a numpy ndarray
- 30. ¿Qué es un espacio de nombres?
Sí; Busqué una respuesta en Google antes de su publicación, y fue esencialmente la misma. La única diferencia es que estoy usando , pero creo que son funcionalmente idénticos. –