首页 > 解决方案 > 输出到变量并访问它

问题描述

我正在尝试通过使用并将输出存储在变量中来识别和复制元素的数量。但即使使用 exsl:node-set() 函数,输出也被视为单个节点/元素,我无法访问其中的单个元素。

我在 Eclipse 中使用标准 xslt 处理器,它们是 JRE Instance Default 和 Xalan 2.7.1

这是一个简单的 XML 文件,我将其用作更大任务的示例:

<root>
    <group>
        <type>2</type>
        <item>4</item>
        <item>5</item>
        <item>6</item>
    </group>
</root>

这是xslt:

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

<xsl:template match="/"> 
    <root> 
        <xsl:variable name="items">
            <xsl:apply-templates select="//item" />
        </xsl:variable>

        items count: <xsl:value-of select="count(exsl:node-set($items))"/>
        item output: <xsl:value-of select="exsl:node-set($items)"/>
    </root>
</xsl:template>

<xsl:template match="item">
    <xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>

看起来 node-set() 不会将树片段转换为节点集,而只是创建一个节点/块。

输出:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:exsl="http://exslt.org/common">

    items count: 1
    item output:
</root>

我如何真正获得一个包含多个元素的节点集以进一步使用它?

提前致谢!

标签: xslt

解决方案


对于计数,请执行以下操作:

<xsl:value-of select="count(exsl:node-set($items)/item)"/>

否则,您将计算父变量,其中只有一个。同样,如果要处理变量中的项目,则需要执行以下操作:

<xsl:for-each select="exsl:node-set($items)/item"/>

对于变量的内容,请尝试:

<xsl:copy-of select="exsl:node-set($items)"/>

要不就:

<xsl:copy-of select="$items"/>

(您无需将结果树片段转换为节点集即可复制它)。

你做什么:

<xsl:value-of select="exsl:node-set($items)"/>

检索整个变量的字符串值,即“456”(您报告的不是空的)。


推荐阅读