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
相关产品推荐
相关产品推荐

