XPath根据属性获取max子元素

时间:2012-10-10 08:19:20

标签: xslt xpath

我需要编写一个XPath来获取具有最大年份的子元素的名称。

这是我的XSLT得到它但问题是我不知何故需要调用模板将年份格式化为数字。

<xsl:value-of select="reports/report[not(preceding-sibling::report/@year &gt;= @year) 
and not(following-sibling::report/@year &gt; @year)]/name" />

示例XML:

<reports>
   <report year="2012 Q4">
     <name>X</name>
   </report>
   <report year="2011 Q4">
     <name>Y</name>
   </company>
</reports>

预期输出:X。

2 个答案:

答案 0 :(得分:0)

将每个比较的表达式包装成substring-before( ... , ' ')

答案 1 :(得分:0)

这是一种替代方法,它仍然包含提取年份编号的代码,但避免了长期复杂的兄弟姐妹检查

<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="reports/report">
         <xsl:sort select="substring-before(@year, ' ')" data-type="number" order="descending" />
         <xsl:if test="position() = 1">
            <xsl:value-of select="name" />
         </xsl:if>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

方法是按顺序对元素进行简单排序,但只输出第一个元素的值。

在样本XML上使用时,输出应为 X