我有一个带有n个项目的列表的XML,但我无法得到使用<xsl:variable>
。
我的XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="my_list">
<xsl:param name="num_items" select="my_items" />
<xsl:call-template name="loop_items">
<xsl:with-param name="count" select="$num_items"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="loop_items">
<xsl:param name="count" select="1"/>
<xsl:variable name="varname" select="concat('item0',$count,'_val')"/>
<xsl:if test="$count > 0">
<p>1- <xsl:value-of select='item01_val'/></p>
<p>2- <xsl:value-of select="concat('item0',$count,'_val')" /></p>
<p>3- <xsl:value-of select="$varname" /></p>
<xsl:call-template name="loop_items">
<xsl:with-param name="count" select="$count - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我的XML
<?xml version="1.0" encoding="UTF-8"?>
<my_list>
<my_items>4</my_items>
<item01_val>lorem</item_01_val>
<item02_val>ipsum</item_02_val>
<item03_val>dolor</item_03_val>
<item04_val>sit</item_04_val>
</my_list>
我期望的结果:
1- lorem
2- lorem
3- lorem
1- ipsum
2- ipsum
3- ipsum
.....
我真正拥有的:
1-lorem
2-item01_val
3-item01_val
1-ipsum
2-item02_val
3-item02_val
您看到我得到的字符串而不是节点值。
我正在使用XSLT 1.0
指令:
<xsl:value-of select="concat('item0',$count,'_val')" />
返回由串联子字符串组成的A string ;它将不是将化合物字符串评估为 xpath expression 。
您可以使用以下内容从相应的元素中获取值:
<xsl:value-of select="*[name() = concat('item0',$count,'_val')]" />
尽管鉴于您的预期结果,但我想知道您为什么不这样做:
<xsl:template match="my_list">
<xsl:for-each select="*[starts-with(name(), 'item')]">
<p>1- <xsl:value-of select="." /></p>
<p>2- <xsl:value-of select="." /></p>
<p>3- <xsl:value-of select="." /></p>
</xsl:for-each>
</xsl:template>
完成。