Вот как это можно сделать :
<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>
Когда это преобразование применяется к любому исходному XML-документу (не используется), получается желаемый результат:
<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
Нет необходимости использовать <xsl:attribute>
в вашем случае , однако при необходимости его можно использовать без проблем:
<xsl:attribute name="xsi:noNamespaceSchemaLocation">
<xsl:value-of select="'mySchema.xsd'"/>
</xsl:attribute>
Обратите внимание, что хорошей практикой является просто определить необходимые пространства имен в элементе <xsl:stylesheet>
, чтобы их можно было легко (повторно) использовать везде, где они необходимы. Это особенно полезно, если данное пространство имен потребуется для нескольких сгенерированных элементов или атрибутов.
В этом случае также полезно указывать все такие префиксы в значении атрибута exclude-result-prefixes
, чтобы пространства имен не распространялись автоматически на все литеральные элементы результата .