我在 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
}
}
在.NET(Core)中,我认为要让您的XmlUrlResolver像在.NET框架中一样工作,您首先需要设置
AppContext.SetSwitch("Switch.System.Xml.AllowDefaultResolver", true);
,例如之前XslCompiledTransform xslt = new XslCompiledTransform();
。