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

XPath技术求助:获取每位人员最后一条records的color值

解决XPath仅返回第一个元素结果的问题

你遇到的核心问题是没有把当前循环的extrapersonsinfo/favourites节点和persons.xml中对应的person节点关联起来,导致每次都只能取到第一个person的最后一条records颜色值。

问题分析

你当前用的XPath:

document('persons.xml')persons/person/favourites/records[last()]/color

这个路径会选中persons.xml里所有person下最后一条records的color,但<xsl:value-of>默认只会输出选中节点集中的第一个值,所以不管循环到哪个favourites,都只会显示red。

解决方案

你需要在XPath里加匹配条件,用current()函数引用当前循环的favourites节点,通过@number属性关联到persons.xml中对应的person。修改后的XPath可以这样写:

document('persons.xml')/persons/person[@number = current()/@number]/favourites/records[last()]/color

(注:观察你的XML结构,person的@number和其下favourites的@number是一致的,所以直接匹配person的属性会更直接)

修改后的完整XSL代码

<h2>Person Information</h2>
<xsl:for-each select="extrapersonsinfo/favourites">
  <table>
    <tr>
      <th>Favourites Number</th>
      <th>Last Favourite Color</th>
    </tr>
    <tr>
      <td><xsl:value-of select="@number"/></td>
      <td><xsl:value-of select="document('persons.xml')/persons/person[@number = current()/@number]/favourites/records[last()]/color"/></td>
    </tr>
  </table>
</xsl:for-each>

效果说明

  • 当循环到extrapersonsinfo中@number="1"的favourites时,会匹配persons.xml里@number="1"的person,取出其最后一条records的color值red。
  • 当循环到@number="2"的favourites时,匹配@number="2"的person,取出yellow。

这样就能得到你预期的两个结果了。

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

相关产品推荐
方舟 Agent Plan

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

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