1

我正在尝试获取属于组的节点的最后一个值。

给定以下 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>

我怎样才能产生这个结果?

4

1 回答 1

2

而不是这样做

<xsl:value-of select="last()/name"/>

您正在寻找的表达式是这样的:

<xsl:value-of select="titles/titlename[last()]"/>

然而,值得指出的是,这并不是真正的“分组”问题。(如果您有两个同名的不同作者元素,这只会是一个分组问题)。你实际上可以在这里使用一个简单的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>
于 2013-06-13T22:21:32.500 回答