XslLoadException:禁止解析外部URI

mbu*_*ugr 3 c# xml xslt

我有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");
Run Code Online (Sandbox Code Playgroud)

跟随异常文本和堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

我试图通过这个解决问题,但问题仍然存在

Abe*_*bel 7

来自评论/更新问题的报价:

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

是的,但未使用路径变量,因此它没有效果.

System.Xml.Xsl.XslLoadException:XSLT编译错误.发生错误\ bin\Debug\visio.xsl(116,40).---> System.Xml.XmlException:禁止解析外部URI.

这可能意味着以下一项或多项内容:

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

要解决,只需允许加载外部文档:

替换这个:

XsltSettings sets = new XsltSettings();
sets.EnableScript = true;
Run Code Online (Sandbox Code Playgroud)

有了这个:

XsltSettings sets = new XsltSettings(true, true);
Run Code Online (Sandbox Code Playgroud)

更新(发表评论后)

我注意到了另一件事.你正在设置最后一个参数null,根据微软应该给你一个ArgumentNullException.它不允许为null,但显然微软现在允许它,但它具有UriResolver无法解决任何问题的效果,因为嘿,它是null ...

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

var resolver = new XmlUrlResolver();
myXslTrans.Load("visio.xsl", sets, resolver);
Run Code Online (Sandbox Code Playgroud)

  • @duck,现在可能有点晚了......但如果你在 .Net Core 中编写,你可能想看看这个:https://github.com/dotnet/runtime/issues/26969。看来您现在需要选择加入。 (4认同)