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

无法将XML配置文件加载到XSLT中,document函数执行遭禁止求解决

解决XSLT中document函数被禁止的问题

默认情况下,.NET的XSLT处理器出于安全考量禁用了document()函数,你需要通过XslSettings类开启该功能,同时确保外部XML路径正确、权限足够。以下是具体实现步骤:

1. 在.NET代码中启用document函数

创建XslSettings实例并开启EnableDocumentFunction属性,加载XSLT样式表时传入该配置:

using System.Xml;
using System.Xml.Xsl;

// 初始化XslSettings,启用document函数
XslSettings xsltSettings = new XslSettings();
xsltSettings.EnableDocumentFunction = true;
// 若XSLT中用到脚本逻辑,可开启EnableScript,无需则注释该行
// xsltSettings.EnableScript = true;

// 加载XSLT样式表,传入配置与解析器
XslCompiledTransform xsltTransformer = new XslCompiledTransform();
// 替换为你的XSLT文件实际路径
xsltTransformer.Load("your-style-sheet.xslt", xsltSettings, new XmlUrlResolver());

// 执行转换(示例:以输入XML为源,输出到指定文件)
XmlDocument inputXml = new XmlDocument();
inputXml.Load("input.xml");

using (XmlWriter outputWriter = XmlWriter.Create("output.xml"))
{
    xsltTransformer.Transform(inputXml, outputWriter);
}

2. 修正XSLT中的document函数路径

确保document()的路径写法正确,避免转义错误:

  • 推荐使用正斜杠:document('test/test.xml')
  • 反斜杠需双重转义:document('test\\test.xml')
  • 或直接使用绝对路径:document('C:/test/test.xml')

示例XSLT代码:

<!-- 读取外部配置XML并应用模板 -->
<xsl:apply-templates select="document('test/test.xml')/configuration/settings"/>

3. 安全防护建议

开启document()函数后,需防范恶意文件注入风险:

  • 自定义XmlResolver限制可访问目录,仅允许加载可信路径下的XML文件:
using System.IO;
using System.Security;

public class RestrictedResolver : XmlUrlResolver
{
    private readonly string _trustedDir;

    public RestrictedResolver(string trustedDirectory)
    {
        _trustedDir = Path.GetFullPath(trustedDirectory);
    }

    public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
    {
        string filePath = Path.GetFullPath(absoluteUri.LocalPath);
        if (!filePath.StartsWith(_trustedDir, StringComparison.OrdinalIgnoreCase))
        {
            throw new SecurityException("禁止访问可信目录外的文件");
        }
        return base.GetEntity(absoluteUri, role, ofObjectToReturn);
    }
}

// 加载XSLT时替换为自定义解析器
xsltTransformer.Load("your-style-sheet.xslt", xsltSettings, new RestrictedResolver("C:/trusted-configs/"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:10:26