我正在尝试修改XLST 1.0文件,我发现我可以使用这样的数组:
ctx.channel().writeAndFlush(...)
现在我想编写一个IF结构,我可以测试数组中的项目数量。
我试过这个,但这不起作用:
<xsl:variable name="array">
<Item>106</Item>
<Item>107</Item>
</xsl:variable>
我是否使用正确的方法处理此问题?
答案 0 :(得分:3)
首先,XML中没有“数组”。
接下来,示例中的count($array)
将始终返回1,因为您的变量包含单个父节点。要计算子Item
个节点,您需要使用count($array/Item)
。
但是,这也会失败,因为在XSLT 1.0中,您的变量包含 result-tree-fragment - 而XSLT 1.0只能计算节点集中的节点
一种解决方案是使用扩展功能(几乎所有XSLT 1.0处理器都支持)将RTF转换为节点集。例如,以下样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="array-rtf">
<Item>106</Item>
<Item>107</Item>
</xsl:variable>
<xsl:variable name="array" select="exsl:node-set($array-rtf)" />
<xsl:template match="/">
<test>
<xsl:value-of select="count($array/Item)"/>
</test>
</xsl:template>
</xsl:stylesheet>
返回:
<?xml version="1.0" encoding="UTF-8"?>
<test>2</test>
另一种选择是使用内部元素而不是变量:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="http://example.com/my"
exclude-result-prefixes="my">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<my:array>
<Item>106</Item>
<Item>107</Item>
</my:array>
<xsl:template match="/">
<test>
<xsl:value-of select="count(document('')/*/my:array/Item)"/>
</test>
</xsl:template>
</xsl:stylesheet>