1

我正在使用 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 的问题,我该如何避免这种情况?

4

1 回答 1

3

默认情况下,xsl 转换会将样式表中定义的命名空间复制到输出文档。您可以通过指定exclude-result-prefixesonxsl:stylesheetreference值为“xsd”的元素来排除此命名空间。

这是xslt sepcification的相关部分:

创建的元素节点还将具有样式表中元素节点上存在的命名空间节点的副本 (...)

通过使用 xsl:stylesheet 元素上的 exclude-result-prefixes 属性或文字结果元素上的 xsl:exclude-result-prefixes 属性将命名空间 URI 指定为排除的命名空间。这两个属性的值都是以空格分隔的命名空间前缀列表。

于 2011-03-10T11:28:11.840 回答