如何创建数组并迭代它并获取其值?
示例:
<xsl:variable name="element">
<xsl:for-each select="document/items/item">
<item>
<xsl:choose>
<xsl:when test="/@attr">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</item>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="$element">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
实际输出:
<p>0100</p>
应该是:
<p>0</p>
<p>1</p>
<p>0</p>
<p>0</p>
编辑:应该动态生成数组!
答案 0 :(得分:0)
鉴于
<xsl:variable name="element">
<xsl:for-each select="document/items/item">
<item>
<xsl:choose>
<xsl:when test="/@attr">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</item>
</xsl:for-each>
</xsl:variable>
和XSLT 1.0处理器你的变量是结果树片段类型,你只能使用<xsl:copy-of select="$element"/>
或<xsl:value-of select="$element"/>
或者你需要使用像exsl:node-set
这样的扩展函数来将结果树片段转换为节点集,以便
<xsl:for-each select="exsl:node-set($element)/item">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
应该(在样式表中声明xmlns:exsl="http://exslt.org/common"
)。
使用XSLT 2.0或3.0,您的变量是一个临时树,其根节点包含一些item
元素,因此您不需要扩展函数,但需要解决item
元素,例如< / p>
<xsl:for-each select="$element/item">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
作为XSLT 2.0 / 3.0的替代方案,您可以将变量声明更改为
<xsl:variable name="element" as="element(item)*">
<xsl:for-each select="document/items/item">
<item>
<xsl:choose>
<xsl:when test="/@attr">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</item>
</xsl:for-each>
</xsl:variable>
要有一个item
元素序列的变量,在这种情况下你的
<xsl:for-each select="$element">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
会做你想做的事。
XSLT 1.0或2.0中没有数组。
答案 1 :(得分:0)
@Pali,
请分享需要转换的XML。 IT会有所帮助。
XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="document/items/item">
<item>
<xsl:choose>
<p>
<xsl:when test="/@attr">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</p>
</xsl:choose>
</item>
</xsl:for-each>
</xsl:variable>
</xsl:template>
</xsl:stylesheet>