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

无外部源文件时如何通过XSL调用内存数据生成XML文件

解决方案

你当前使用空Document作为输入仅输出XML声明的核心原因是:你的XSLT逻辑没有匹配到输入源的根节点规则,默认转换逻辑只会输出XML声明头。你可以选择以下两种不需要依赖外部文件、全程使用内存数据的方案实现需求:


方案1:使用空流作为输入源

如果你的XSLT完全不依赖输入XML的节点内容,仅通过自定义扩展函数生成数据,可以直接传入空的内存流作为输入源,无需构造Document对象:

if (xsltFile != null) {
    Transformer transformer = getTransformer(xsltFile);
    // 构造内存空输入源,不需要读取任何外部文件
    Source source = new StreamSource(new ByteArrayInputStream(new byte[0]));
    ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
    StreamResult outputTarget = new StreamResult(byteOutputStream);

    if (transformer != null) {
        try {
            transformer.transform(source, outputTarget);
            rst = new String(byteOutputStream.toByteArray());
        } catch (Exception e) {
            Log.error(this, "Error while transforming xml.", e);
        }
    }
}

方案2:补充XSLT根节点匹配规则适配空Document输入

如果你要继续使用空Document作为输入源,只需要在XSLT中补充根节点匹配模板,把所有生成逻辑放到该模板内即可:

<!-- 新增根节点匹配规则 -->
<xsl:template match="/">
    <!-- 原有生成逻辑全部放到这个模板内部 -->
    <ExternalReference>
        <xsl:value-of select="erstefnImport:retriveXslExternalReference()" />
    </ExternalReference>
    <!-- 其他需要生成的XML节点也写在这里 -->
</xsl:template>

修改XSLT后你之前的DOMSource相关代码就可以正常输出完整XML内容。


核心说明

XSLT转换依赖模板和输入节点的匹配规则,如果你没有定义根节点/的匹配模板,空输入源转换时只会触发默认规则输出XML声明,不会生成你写的固定节点内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:15:08