这是如何做到的:
<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
在这种情况下,最好在属性值中指定所有此类前缀,这样命名空间不会自动传播到所有文字结果元素上。