xslloadeexception:禁止解析外部uri

本文关键字:外部 uri 禁止 xslloadeexception | 更新日期: 2023-09-27 18:11:28

我有一个xslt表,其中包含另一个xslt文件的标签,所有文件编译正确且无错误,但当运行以下代码时,我得到异常

var myXslTrans = new XslCompiledTransform();
XsltSettings sets = new XsltSettings();
sets.EnableScript = true;
myXslTrans.Load("visio.xsl",sets,null);
myXslTrans.Transform("page1.xml", "page.html");

后面的异常文本和stacktrace:

System.Xml.Xsl.XslLoadException: 
  XSLT compile error. An error occurred 'bin'Debug'visio.xsl(116,40). 
  ---> System.Xml.XmlException: Resolving of external URIs was prohibited.
    at System.Xml.Xsl.Xslt.XsltLoader.Load(XmlReader reader)
       at System.Xml.Xsl.Xslt.XsltLoader.Load(Compiler compiler, Object stylesheet, XmlResolver xmlResolver)
       at System.Xml.Xsl.Xslt.Compiler.Compile(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil)
       at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
       at System.Xml.Xsl.XslCompiledTransform.Load(String stylesheetUri, XsltSettings settings, XmlResolver stylesheetResolver)

我试图用这个方法解决问题,但问题仍然存在

xslloadeexception:禁止解析外部uri

摘自评论/更新问题:

我将文件复制到项目中使用它,path变量获取应用程序的基目录

可以,但是没有使用path变量,所以它不起作用。

System.Xml.Xsl。XSLT编译错误。'bin'Debug' visual .xsl(116,40)出错。--> System.Xml.XmlException:解析外部uri被禁止。

这可能意味着以下几种情况中的一种或多种:

  • 您的设置不允许加载外部文档(这是XslCompiledTransform的默认设置,请参阅文档)。
  • 样式表直接(通过xsl:import, xsl:include, document())或间接(通过DTD或解析外部实体)包含URI。
  • 如果以上不是(完全)正确,至少错误指向问题所在的确切点。你的问题中没有复制这个,但是你会在(116,40)处找到它。

要解决这个问题,只允许加载外部文档:

替换:

XsltSettings sets = new XsltSettings();
sets.EnableScript = true;
与这个:

XsltSettings sets = new XsltSettings(true, true);

更新(在你的评论之后)

我注意到另一件事。您正在将最后一个参数设置为null,根据微软应该为您提供ArgumentNullException。它不允许为空,但显然微软现在允许它,但它的效果是UriResolver不能解决任何问题,因为嘿,它是空的…

不太确定为什么将其设置为null,但尝试将其设置为有效值,即:

var resolver = new XmlUrlResolver();
myXslTrans.Load("visio.xsl", sets, resolver);