我正在使用Sax变压器工厂对大量的xsd文件进行XSLT转换,因此xslt的特定行如下所示。
<xsl:result-document href="{$fileName}"
doctype-public="-//OASIS//DTD DITA Reference//EN"
doctype-system="reference.dtd">
<reference id="{$guid}" xml:lang="EN-US" outputclass="landscape">
<title>
<xsl:value-of select="$typeName"/>
</title>
<abstract>....
引用标记是文档的根,但结果有一个不需要的xmlns:xsd属性,如下所示。
...<reference xmlns:xsd="http://www.w3.org/2001/XMLSchema"
id="RANDOM-ID".....
这个附加属性导致使用转换后的xml的解析器出现问题。 这是XSLT或SAXON api的问题,我该如何避免这种情况?
答案 0 :(得分:2)
默认情况下,xsl转换会将样式表中定义的名称空间复制到输出文档。您可以通过在exclude-result-prefixes
或xsl:stylesheet
元素上指定值为“xsd”的reference
来排除此命名空间。
以下是xslt sepcification的相关部分:
创建的元素节点还将具有样式表中元素节点上存在的命名空间节点的副本(...)
通过在xsl:stylesheet元素上使用exclude-result-prefixes属性或在文字结果元素上使用xsl:exclude-result-prefixes属性,将名称空间URI指定为排除的命名空间。这两个属性的值是以空格分隔的命名空间前缀列表。