首页 > 解决方案 > XSLT concat 计数器与字段名称,使其动态

问题描述

我正在使用以下 xslt 生成 xml。我想要做的是迭代然后根据计数器动态设置字段的名称。

我目前的 xslt 看起来像这样,但显然我错过了一些东西

<xsl:for-each select="list1">   
     <field name="tagName">
         <xsl:choose>
            <xsl:when test="something != 'null'">
                <value><xsl:value-of select="something" /></value>
            </xsl:when>
            <xsl:otherwise>
                <value></value>
            </xsl:otherwise>
        </xsl:choose>
    </field>
</xsl:for-each>

我想要的是字段名称类似于 tagName1、tagName2 等。

我尝试使用以下

 <field name=concat('tagName', position())>

然而这并没有奏效。你能为我指出正确的方向吗?

标签: javaxmlpdfxslt

解决方案


我不确定源 XML 是什么样的,所以我在这里猜测。

假设这是来源:

<list1>
  <tag>foo</tag>
  <tag>bar</tag>
  <tag>baz</tag>
</list1>

然后使用这个模板:

<xsl:template match="/list1">
  <xsl:for-each select="tag">   
    <field name="{concat('tag', position(), text())}"/>
  </xsl:for-each>
</xsl:template>

将返回:

<field name="tag1foo"/>
<field name="tag2bar"/>
<field name="tag3baz"/>

这接近你想要的吗?


推荐阅读