You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT转换中复制指定DOCTYPE声明?(XSLT3.0/4.0)

如何在XSLT 3.0/4.0转换中保留指定DOCTYPE声明

你用到的<xsl:output>配置本身是正确的,但要确保以下几个细节,才能让目标DOCTYPE声明正确输出:

关键注意事项

  • 使用兼容XSLT 3.0+的处理器:比如Saxon(HE/PE/EE版本)完全支持doctype-public和doctype-system属性,避免使用不支持新标准的老旧处理器。
  • 保持根元素名称一致:你的DOCTYPE根是topic,转换后的输出根元素必须仍是<topic>——如果转换过程中修改了根元素名称或替换了根节点,DOCTYPE声明会无法正确关联。
  • 避免手动输出DOCTYPE:不要在模板里用<xsl:text>或其他方式手动拼接DOCTYPE,依赖<xsl:output>是符合XML规范的标准做法,能避免格式错误。

完整XSLT示例

如果你的需求是原样复制输入文档并保留DOCTYPE,可使用以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output 
        method="xml" 
        encoding="UTF-8" 
        indent="yes"
        doctype-public="-//OASIS//DTD DITA Topic//EN" 
        doctype-system="topic.dtd"/>
    
    <xsl:template match="/">
        <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

如果是自定义转换(比如修改文档内容但保留根元素),只需确保最终输出的根节点是<topic>,同时保留上述<xsl:output>配置即可。

内容的提问来源于stack exchange,提问作者oleksii.sapov-erlinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:35:14