xslt - 输出到变量并访问它
问题描述
我正在尝试通过使用并将输出存储在变量中来识别和复制元素的数量。但即使使用 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>
我如何真正获得一个包含多个元素的节点集以进一步使用它?
提前致谢!
解决方案
对于计数,请执行以下操作:
<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”(您报告的不是空的)。
推荐阅读
- javascript - Vue JS设置填充选择中的第一个项目被选中
- java - Firebase AuthUI - 仅在生产中的未知错误代码
- c# - 使用命名管道在 C# 和 C++ 应用程序之间进行持续通信
- android - 输入提交空,使用nativescript
- android - 获取连接设备地址蓝牙
- elasticsearch - 订购 elasticsearch 聚合
- windows-community-toolkit - 仅在我的项目中使用 Microsoft.Toolkit.Parsers.RssParser
- javascript - Firebase signInWithPopup 不适用于 Firefox - reactjs
- javascript - 第二次验证无效
- mysql - 使用查询将数据库中所有值中字母的第一个单词设为大写