加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:54:58 所属栏目:百科 来源:网络整理
导读:有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 XML结构: nodes node label1Label a/label1 value1Value a/value1 label2Label b/label2 value2Value b/value2 label3Label c/label3 value3Value c/value3 etc... /node/nodes 总共有
有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读