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

如何将XSLT转换结果保存到新XML文件?Oxygen终端输出问题

解决XSLT转换结果无法保存到文件的问题

核心问题分析

你之前的错误主要有两点:

  1. <xsl:result-document> 不能直接作为 <xsl:stylesheet> 的子元素,必须放置在**模板(<xsl:template>)**内部。
  2. 你使用了空的 <xsl:result-document/> 标签,没有包裹任何要输出的内容;同时把它放在匹配所有节点的identity模板里,导致每个节点处理时都尝试创建文件,触发重复创建的错误,最终生成空文件。

两种解决方案

方案1:通过Oxygen配置直接指定输出文件(推荐,无需修改XSLT)

这是最便捷的方式,不用改动现有XSLT代码:

  • 点击Oxygen中运行XSLT按钮旁的下拉箭头,选择「Configure Transformation Scenario」。
  • 在弹出的配置窗口切换到「Output」标签页。
  • 勾选「Save as」,选择输出文件的路径和文件名(比如new_badius.xml)。
  • 保存配置后运行转换,结果会自动保存到指定文件。

方案2:修改XSLT,正确使用<xsl:result-document>

如果必须通过XSLT代码控制输出文件,需要把要输出的内容完整包裹在<xsl:result-document>内部,且只在主模板中执行一次(比如匹配根节点的模板):

<xsl:stylesheet 
xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:telota="http://www.telota.de"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xpath-default-namespace="http://www.tei-c.org/ns/1.0"
exclude-result-prefixes="xs"
version="2.0">

    <!-- 匹配根节点的主模板,仅执行一次 -->
    <xsl:template match="/">
        <!-- 包裹所有转换内容,指定输出文件 -->
        <xsl:result-document href="new_badius.xml">
            <!-- 这里放置你的转换逻辑,例如复制整个文档结构 -->
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:result-document>
    </xsl:template>

    <!-- 保留identity模板,用于复制所有节点维持原结构 -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

修改后,转换时只会创建一次输出文件,并且把完整的转换结果写入其中。


内容的提问来源于stack exchange,提问作者piah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:21:12