vinculado prefijo nombres lectura está espacio error definido xml xslt xml-namespaces

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.