XSLT 转换期间出错:加载文档“https://ex.com/example.xml”时发生错误。请参阅 InnerException 了解完整描述

问题描述 投票:0回答:1

我在 XSLT 转换期间不断收到错误:加载文档“https://www.example.com/myxml/example.xml”时发生错误。有关错误的完整描述,请参阅 InnerException。 我传入一个格式良好的 xml 文档和 xslt 文件的路径。 xslt 使用 document 函数加载上面的假 URL。 别担心,真实的网址是可以访问的,我已经测试过了。它应该能够根据 xslt 设置允许这样做。 此外,使用 XSL 转换功能时,转换可以在 Visual Studio 中进行。 看来,无论设置如何,我都无法授予 xsl 转换足够的权限来执行此操作。

static XElement TransformXElement(XElement xmlElement, string xsltFilePath)
{
    try
    {
        // Load the XSLT file
        XslCompiledTransform xslt = new XslCompiledTransform();
        
        XsltSettings settings = new XsltSettings();
        settings.EnableDocumentFunction = true; // Enable document() function if needed

        // Create an XmlUrlResolver with credentials if required
        XmlUrlResolver resolver = new XmlUrlResolver();
        resolver.Credentials = System.Net.CredentialCache.DefaultCredentials; // Example: Use default credentials

        // Load XSLT with resolver and settings
        xslt.Load(xsltFilePath, settings, resolver);

        // Create an XDocument from the XElement
        XDocument xDocument = new XDocument(xmlElement);

        // Prepare an XmlWriter to capture the transformed output
        using (StringWriter stringWriter = new StringWriter())
        using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xslt.OutputSettings))
        {
            // Apply the transformation
            xslt.Transform(xDocument.CreateReader(), null, xmlWriter);            

            // Parse the transformed XML string back into an XElement
            return XElement.Parse(stringWriter.ToString());
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error during XSLT transformation: {ex.Message}");
        return null; // Handle the error appropriately in your application
    }
}
c# .net asp.net-core xslt
1个回答
0
投票

在.NET(Core)中,我认为要让您的XmlUrlResolver像在.NET框架中一样工作,您首先需要设置

AppContext.SetSwitch("Switch.System.Xml.AllowDefaultResolver", true);
,例如之前
XslCompiledTransform xslt = new XslCompiledTransform();

© www.soinside.com 2019 - 2024. All rights reserved.