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

.NET用Saxon运行XSLT时xsl:result-document报主输出文件系统标识符未知错

错误原因

Saxon执行xsl:result-document时需要通过基准URI解析相对路径Batch-{position()}.xml,你当前代码仅配置了XML输入的BaseUri,未给XSLT转换器设置输出基准URI,且主输出绑定的是内存StringWriter,没有关联文件系统路径,导致Saxon无法确定拆分文件的存储位置,触发该报错。

修复方案

在初始化XsltTransformer后新增BaseOutputUri配置,指定拆分文件的输出根目录即可,修改后的C#代码如下:

using System.IO;
using Saxon.Api;

public static string SaxonProcessorXSLT(string xmlToExport, string xslStylesheet, string outputRootPath)
{
    // 提前创建输出目录避免IO错误
    if (!Directory.Exists(outputRootPath))
    {
        Directory.CreateDirectory(outputRootPath);
    }

    using (StringReader xmlStream = new StringReader(xmlToExport))
    {
        using (StringReader xslStream = new StringReader(xslStylesheet))
        {
            Processor xsltProcessor = new Processor();
            DocumentBuilder documentBuilder = xsltProcessor.NewDocumentBuilder();
            documentBuilder.BaseUri = new Uri("file://");
            XdmNode xdmNode = documentBuilder.Build(xmlStream);

            XsltCompiler xsltCompiler = xsltProcessor.NewXsltCompiler();
            XsltExecutable xsltExecutable = xsltCompiler.Compile(xslStream);
            XsltTransformer xsltTransformer = xsltExecutable.Load();
            xsltTransformer.InitialContextNode = xdmNode;
            // 新增:设置输出基准URI,路径末尾必须加斜杠
            xsltTransformer.BaseOutputUri = new Uri($"file:///{outputRootPath.Replace("\\", "/")}/");

            using (StringWriter stringWriter = new StringWriter())
            {
                Serializer serializer = xsltProcessor.NewSerializer();
                serializer.SetOutputWriter(stringWriter);
                xsltTransformer.Run(serializer);
                // 当前XSLT无主输出内容,返回值为空,可根据需求调整逻辑
                return stringWriter.ToString();
            }
        }
    }
}

调用示例

如果要将拆分文件输出到D:\BatchOutput\目录,调用时传入对应路径即可:

SaxonProcessorXSLT("你的XML内容", "你的XSLT内容", @"D:\BatchOutput");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:03