我有 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");
遵循异常文本和堆栈跟踪:
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)
我尝试通过以下方式解决问题this但问题仍然存在
评论/更新问题的引用:
我将文件复制到项目中以使用它,路径变量用于获取应用程序的基目录
是的,但是没有使用path变量,所以没有效果。
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;
有了这个:
XsltSettings sets = new XsltSettings(true, true);
更新(在您发表评论后)
我注意到另一件事。您将最后一个参数设置为null
, which 根据微软的说法应该给你一个ArgumentNullException。它不允许为空,但显然微软现在允许它,但它的效果是UriResolver
无法解决任何问题,因为嘿,它是空的......
不太确定为什么将其设置为 null,但尝试将其设置为有效值,即:
var resolver = new XmlUrlResolver();
myXslTrans.Load("visio.xsl", sets, resolver);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)