1

我需要编写一个 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。

4

2 回答 2

0

只需将每个比较表达式包装到substring-before( ... , ' ').

于 2012-10-10T08:31:05.010 回答
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

于 2012-10-10T11:01:35.733 回答