当前位置 : 主页 > 网页制作 > xml >

xml – 循环中的XSLT动态节点名称

来源:互联网 收集:自由互联 发布时间:2021-06-13
有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 XML结构: nodes node label1Label a/label1 value1Value a/value1 label2Label b/label2 value2Value b/value2 label3Label c/label3 value3Value
有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 XML结构:

<nodes>
  <node>
    <label1>Label a</label1>
    <value1>Value a</value1>
    <label2>Label b</label2>
    <value2>Value b</value2>
    <label3>Label c</label3>
    <value3>Value c</value3>
    etc...
  </node>
</nodes>

总共有20个标签/值对数据.我想通过XSLT在表中输出这些.通过循环模板20次(除非有更好的方法).

我下面的代码有效,但在输出值时不会接受动态数字(例如

<xsl:value-of select="$node/label$index"/>

)

这是迄今为止的代码:

<xsl:param name="currentPage"/>
<xsl:variable name="numberOfPairs" select="20" />

<xsl:template match="/">
  <table>
    <xsl:call-template name="outputData">
      <xsl:with-param name="node" select="$currentPage" />
    </xsl:call-template>
  </table>
</xsl:template>

<xsl:template name="outputData">
  <xsl:param name="node" select="." />
  <xsl:param name="index" select="1" />
  <tr>
    <td><xsl:value-of select="$node/label1"/></td>
    <td><xsl:value-of select="$node/value1"/></td>
  </tr>
  <xsl:if test="$index &lt;= $numberOfPairs">
    <xsl:call-template name="outputData">                         
      <xsl:with-param name="node" select="$node" />
      <xsl:with-param name="index" select="$index + 1" />                             
    </xsl:call-template>
  </xsl:if>
</xsl:template>

有谁能建议解决这个问题?

<xsl:output method="xml" indent="yes" />

<xsl:template match="/">        
    <table>
        <xsl:apply-templates select="nodes/node/*[starts-with(name(), 'label')]"/>
    </table>
</xsl:template>

<xsl:template match="*">

    <xsl:variable name="index" select="substring(name(), 6)"/>

    <tr>
        <td>
            <xsl:value-of select="."/>
        </td>
        <td>
            <xsl:value-of select="following-sibling::*[name() 
                          = concat('value', $index)]"/>
        </td>
    </tr>
</xsl:template>

输出:

<table>
  <tr>
    <td>Label a</td>
    <td>Value a</td>
  </tr>
  <tr>
    <td>Label b</td>
    <td>Value b</td>
  </tr>
  <tr>
    <td>Label c</td>
    <td>Value c</td>
  </tr>
</table>
网友评论