我怎么知道xsl:variable包含多少个标签?

Tho*_*ulé 2 xslt xpath xslt-1.0

在XSLT 1.0中,如果我有这样的<xsl:variable>声明:

<xsl:variable name="ListeEcheances">
    <bla/><bli/>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

我怎么知道它是否空?甚至更好:我怎么知道它包含多少个标签?(我知道这里有2个标签,但我的真实代码有点复杂:))

<xsl:when test="$ListeEcheances=''">返回true(它不计算标签,只计算文本);

<xsl:when test="count($ListeEcheances/*) > 0"> 遗憾的是没有编译.

谢谢您的帮助.

Abe*_*bel 5

这确实是不正确的,你的编译器在抛出错误时是正确的.您只能计算一个节点集,不能计算结果树片段.您需要的是使用扩展函数转换节点集中的变量.

对于Saxon 6.5,这将是exsl:node-set.这适用于Saxon 6.5和任何支持EXSLT节点集功能的处理器(大部分都可以).编辑:Jirka Kosek写下了每个处理器节点集扩展列表,我敢肯定你的列表.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0" xmlns:exsl="http://exslt.org/common">

    <xsl:variable name="ListeEcheances">
        <bla/><bli/>
    </xsl:variable>

    <xsl:template match="/">
        <xsl:choose>
            <xsl:when test="count(exsl:node-set($ListeEcheances)/*) > 0">
                <xsl:text>Larger then zero!</xsl:text>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

输出:

<?xml version="1.0" encoding="utf-8"?>Larger then zero!
Run Code Online (Sandbox Code Playgroud)

注意:如果您要使用XSLT 2.0,那么一切都是节点集,并且您不会遇到XSLT 1.0的这种尴尬,其中结果树片段几乎无用.