Arrays XSLT计数数组中的项

Arrays XSLT计数数组中的项,arrays,xslt-1.0,Arrays,Xslt 1.0,我试图修改XLST 1.0文件,发现我可以使用如下数组: <xsl:variable name="array"> <Item>106</Item> <Item>107</Item> </xsl:variable> 106 107 现在我想写一个IF结构,在这里我对数组中的项目数量进行测试 我试过了,但没用: <xsl:if test="count($array) = 0"></

我试图修改XLST 1.0文件,发现我可以使用如下数组:

  <xsl:variable name="array">
    <Item>106</Item>
    <Item>107</Item>
  </xsl:variable>

106
107
现在我想写一个IF结构,在这里我对数组中的项目数量进行测试

我试过了,但没用:

<xsl:if test="count($array) = 0"></xsl:if>

对于这个问题,我是否使用了正确的方法?

首先,XML中没有“数组”

接下来,在您的示例中,
count($array)
将始终返回1,因为您的变量包含一个父节点。要计算子
节点,需要使用
count($array/Item)

但是,这也会失败,因为在XSLT1.0中,变量包含一个结果树片段,而XSLT1.0只能对节点集中的节点进行计数

一种解决方案是使用扩展函数(几乎所有XSLT1.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>

106
107
返回:

<?xml version="1.0" encoding="UTF-8"?>
<test>2</test>

2.

另一种选择是使用内部元素而不是变量:

<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>

106
107

您想对计数做什么?看看它是否为零?在
之间做些什么?“它不起作用”是什么意思?请更具体地说,根据我的问题很好地编辑问题我已经以最好的方式回答了这一问题,但我感到困惑:如果您将变量值硬编码到样式表中,为什么需要计算其中的项目?我使用了第一种方法,并且它按照预期工作。非常感谢你的帮助!自XSLT 3.0起,就有本机数组: