está - error de lectura xml: prefijo no vinculado a un espacio de nombres
Crear el espacio de nombres xmlns: xsi y el atributo (3)
Simplemente puedes usar:
<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">
Directamente en su XSL, eso funcionaría, solo necesita realmente xsl: elemento si no puede codificar el nombre de la etiqueta. De manera similar con los atributos, puede agregarlos directamente, a menos que necesite hacer condicional.
Quiero crear el siguiente elemento:
<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">
Si uso algo como esto:
<xsl:element name="excercises">
<xsl:attribute name="xmlns:xsi" namespace="http://www.w3.org/2001/XMLSchema-instance"/>
Entonces crea algo así:
<excercises xp_0:xsi="" xmlns:xp_0="http://www.w3.org/2001/XMLSchema-instance">
Que no se parece a lo que quiero ...
Aquí es cómo se puede hacer esto :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="xsi">
<xsl:output omit-xml-declaration="yes"/>
<!-- -->
<xsl:template match="/">
<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd"/>
</xsl:template>
</xsl:stylesheet>
Cuando esta transformación se aplica a cualquier documento XML fuente (no utilizado), se produce el resultado deseado:
<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
No es necesario usar <xsl:attribute>
en su caso , sin embargo, si es necesario, se puede usar sin ningún problema:
<xsl:attribute name="xsi:noNamespaceSchemaLocation">
<xsl:value-of select="''mySchema.xsd''"/>
</xsl:attribute>
Tenga en cuenta que es una buena práctica simplemente definir los espacios de nombres necesarios en el elemento <xsl:stylesheet>
para que puedan ser (re) utilizados en cualquier lugar donde se necesiten. Esto es especialmente útil, si se necesita un espacio de nombres dado en más de un elemento o atributo generado.
En este caso, también es bueno especificar todos esos prefijos en el valor del atributo exclude-result-prefixes
para que los espacios de nombres no se propaguen automáticamente en todos los elementos de resultado literales.
Pruebe lo siguiente en su lugar:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:apply-templates select="xml"></xsl:apply-templates>
</xsl:template>
<xsl:template match="xml">
<xsl:element name="exercises">
<xsl:attribute name="xsi:noNamespaceSchemaLocation">mySchema.xsd</xsl:attribute>
some value
</xsl:element>
</xsl:template>
</xsl:stylesheet>
La principal preocupación es declarar el espacio de nombres xsi en la declaración.
Acabo de inventar la coincidencia de plantilla solo para probar.