我想在我的XSLT文件中使用嵌入式资源,但在调用'document(...)'时,C#抱怨"加载文档时出错......"
我想在XSLT文件中使用已定义的资源并通过它获取它们:"document('')/ / my:resources / "...
我怎样才能做到这一点??
ex xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="xslt-gruper-v1.2.xsl" exclude-result-prefixes="my">
<my:resources>
<one>tryb</one>
</my:resources>
<xsl:variable name="res" select="document('')/*/my:resources/("/>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
如何在C#中无异常地访问此类结构?我将在静态转换期间通过ex添加.Opera一切正常.
Dim*_*hev 10
Run Code Online (Sandbox Code Playgroud)<xsl:variable name="res" select="document('')/*/my:resources/("/>
该select属性的值不是语法正确的XPath表达式.每个兼容的XSLT处理器都必须引发错误.
方案:
纠正以上内容:
<xsl:variable name="vRes" select="document('')/*/my:resources"/>
Run Code Online (Sandbox Code Playgroud)
如果仍然存在异常,请阅读有关XsltSettings类的信息.
然后使用此构造函数创建XsltSettings的实例,如下所示:
XsltSettings(true, false)
Run Code Online (Sandbox Code Playgroud)
不要启用脚本 - 将构造函数的第二个参数保留为false.
以下是更完整的代码段:
// Create the XsltSettings object with document() enabled and script disabled.
XsltSettings settings = new XsltSettings(true,false);
// Create the XslCompiledTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("sort.xsl", settings, new XmlUrlResolver());
Run Code Online (Sandbox Code Playgroud)
更新:出现错误的另一个可能原因是在内存中动态创建XSLT样式表(不是来自文件).在这种情况下,XSLT处理器通常无法解析相对uri document('').
在最后一种情况下,解决方案是使xsl:variable有用元素成为an的内容,并使用xxx:node-set()扩展函数来处理此元素.