Xml XSLT 1.0中Document()函数的使用
我正在使用.NET代码触发转换 除非我将“Xml XSLT 1.0中Document()函数的使用,xml,xslt,Xml,Xslt,我正在使用.NET代码触发转换 除非我将“EnableDocumentFunction”属性添加到XSL设置中,否则程序将抛出如下错误:。。“禁止使用Document()函数”” 实际上这个程序是不可编辑的,是一种只读的。。是否可以编辑XSL代码本身,以便使用document()函数 示例XSL和XML如下所示: 示例XML: 其他 和示例XML: <?xml version="1.0" encoding="utf-8"?> <root> <test_n
EnableDocumentFunction
”属性添加到XSL设置中,否则程序将抛出如下错误:。。“禁止使用Document()函数”
”
实际上这个程序是不可编辑的,是一种只读的。。是否可以编辑XSL代码本身,以便使用document()函数
示例XSL和XML如下所示:
示例XML:
其他
和示例XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<test_node>California</test_node>
<test_node>CA</test_node>
<test_node> CA</test_node>
<test_node>Texas</test_node>
<test_node>TX</test_node>
<test_node>CAA</test_node>
<test_node></test_node>
</root>
加利福尼亚
加利福尼亚州
加利福尼亚州
得克萨斯州
德克萨斯州
民航局
这里的document()函数用于访问XSLT文档本身,并提取xsl:变量的内容。在这种情况下,实际上根本不需要使用document()函数
因为您在这里使用的是Microsoft.Net,所以应该能够访问XSLT的msxml扩展函数。事实上,msxml的相关名称空间已经在XSLT文档中定义
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
这意味着您将能够使用node set函数轻松地直接访问State_Code_Tran变量中的节点。为此,请尝试将现有的xsl:choose函数更改为如下所示:
<xsl:choose>
<xsl:when test="msxsl:node-set($State_Code_Trn)/State[@In=$test_val]">
<xsl:value-of select="msxsl:node-set($State_Code_Trn)/State[@In=$test_val]/@Out"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>Other</xsl:text>
</xsl:otherwise>
</xsl:choose>
其他
这将产生以下输出
<root>
<test_node>CA</test_node>
<test_node>CA</test_node>
<test_node>Other</test_node>
<test_node>TX</test_node>
<test_node>TX</test_node>
<test_node>Other</test_node>
<test_node>Other</test_node>
</root>
加利福尼亚州
加利福尼亚州
其他
德克萨斯州
德克萨斯州
其他
其他
(请注意,在原始XML中的一个“CA”之前有一个空格,这就是为什么它显示为“其他”。您可能需要添加一些修剪函数来处理此问题。除了@Tim-C的答案外,您还可以使用ext:node-set()扩展函数,其中“ext”前缀与EXSLT命名空间关联:
"http://exslt.org/common“
这是由
xslcomiledtransform
支持的,它将使您的XSLT代码更易于移植,这是一个标准的扩展函数库。hastoff@Tim,非常感谢:):))酷。我不知道XslCompiledTransform支持这一点。现在,如果它也支持XSLT2.0,那么我将是一个快乐的人……感谢您宝贵的回答:)
<root>
<test_node>CA</test_node>
<test_node>CA</test_node>
<test_node>Other</test_node>
<test_node>TX</test_node>
<test_node>TX</test_node>
<test_node>Other</test_node>
<test_node>Other</test_node>
</root>