XslLoadException:禁止解析外部URI
我有xslt表有另外的xslt文件的包含标签,所有文件编译正确,没有错误但是当运行以下代码我得到了exception
var myXslTrans = new XslCompiledTransform(); XsltSettings sets = new XsltSettings(); sets.EnableScript = true; myXslTrans.Load("visio.xsl",sets,null); myXslTrans.Transform("page1.xml", "page.html");
在exception文本和堆栈跟踪之后:
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)
我试图通过这个解决问题,但问题仍然存在
来自评论/更新问题的报价:
我将文件复制到项目中使用它,路径变量来获取应用程序的基本目录
是的,但未使用路径变量,因此它没有效果。
System.Xml.Xsl.XslLoadException:XSLT编译错误。 发生错误\ bin \ Debug \ visio.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
, 根据Microsoft的说法,它应该为您提供ArgumentNullException
。 它不允许为null,但显然微软现在允许它,但它会产生UriResolver
无法解决任何问题的效果,因为嘿,它是null …
不太确定为什么将它设置为null,但尝试将其设置为有效值,即:
var resolver = new XmlUrlResolver(); myXslTrans.Load("visio.xsl", sets, resolver);