我正在尝试获取属于某个组的节点的最后一个值。
给出以下XML -
<books>
<author>
<name>R.R.</name>
<titles>
<titlename>North</titlename>
<titlename>King</titilename>
</titles>
</author>
<author>
<name>R.L.</name>
<titles>
<titlename>Dragon</titlename>
<titlename>Wild</titilename>
</titles>
</author>
</books>
我认为它会像 -
<template match="/">
<for-each-group select="books/author" group-by="name">
<lastTitle>
<name><xsl:value-of select="name"/></name>
<title><xsl:value-of select="last()/name"/></title>
</lastTitle
</for-each-group>
<template>
因此结果将是 -
<lastTitle>
<name>R.R</name>
<title>King</title>
</lastTitle>
<lastTitle>
<name>R.L.</name>
<title>Wild</title>
</lastTitle>
我如何产生这个结果?
答案 0 :(得分:2)
而不是这样做
<xsl:value-of select="last()/name"/>
您正在寻找的表达方式是:
<xsl:value-of select="titles/titlename[last()]"/>
然而,值得指出的是,这不是一个真正的“分组”问题。 (如果您有两个不同的 author 元素具有相同的名称,那么这只会是一个分组问题)。实际上你可以在这里使用一个简单的 xsl:for-each
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="books/author">
<lastTitle>
<name>
<xsl:value-of select="name"/>
</name>
<title>
<xsl:value-of select="titles/titlename[last()]"/>
</title>
</lastTitle>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>