<xsl:value-of> 使用串联变量获取字符串而不是值



我有一个带有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>

完成。

相关内容

  • 没有找到相关文章