You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用<xsl:for-each>遍历XML元素时重复首个元素的问题求助

解决XSLT <xsl:for-each>重复第一个元素的问题

我来帮你搞定这个问题!你遇到的循环只重复第一个<customer>元素的情况,核心原因是XSLT路径选择的上下文搞错了,另外你的XML结构也有个小问题需要先修正。

问题1:XML缺少根元素(合法性问题)

首先你的XML片段没有根节点,这不符合XML规范,很多解析器会报错或者解析异常。你需要把所有<customer>节点包裹在一个根节点里,比如<customers>:

<?xml version="1.0" encoding="ISO-8859-1"?>
<customers>
  <customer ref="Hannah">
    <fullname>
      <firstname>Hannah</firstname>
      <lastname>Hannah</lastname>
    </fullname>
    <meter ref="Hannah">
      <reading>
        <meterread>622224492</meterread>
      </reading>
    </meter>
  </customer>
  <customer ref="Hannah">
    <fullname>
      <firstname>Hannah</firstname>
      <lastname>Hannah</lastname>
    </fullname>
    <meter ref="Hannah">
      <reading>
        <meterread>2822222132</meterread>
      </reading>
    </meter>
  </customer>
</customers>

问题2:XSLT路径上下文错误

在<xsl:for-each select="customer">循环内部,当前的上下文已经是每个<customer>节点了,但你写的select="customer/fullname"是从文档根节点重新查找<customer>下的<fullname>,所以每次都拿到第一个<customer>的数据。

你需要用相对路径来引用当前节点下的子元素:

  • 要获取当前customer的姓名,直接写fullname/firstname和fullname/lastname(分开显示更清晰)
  • 要获取当前customer的ref属性,直接写@ref;如果是meter的ref,则写meter/@ref

修正后的XSL代码如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <xsl:for-each select="customers/customer">
          <p>Name: <xsl:value-of select="fullname/firstname"/> <xsl:value-of select="fullname/lastname"/></p>
          <p>Customer Ref: <xsl:value-of select="@ref"/></p>
          <p>Meter Ref: <xsl:value-of select="meter/@ref"/></p>
          <p>Meter Read: <xsl:value-of select="meter/reading/meterread"/></p>
          <hr/>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

关键说明

  • <xsl:for-each select="customers/customer">:因为我们给XML加了根节点<customers>,所以这里要从根节点开始定位到所有<customer>
  • 循环内部的select都是基于当前<customer>节点的相对路径,这样就能正确遍历每个customer的对应数据了

这样修改后,你的循环就能正常遍历所有<customer>元素,不会再重复第一个元素啦!

内容的提问来源于stack exchange,提问作者user11583970

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:59:49