我需要编写一个XPath来获取具有最大年份的子元素的名称。
这是我的XSLT得到它但问题是我不知何故需要调用模板将年份格式化为数字。
<xsl:value-of select="reports/report[not(preceding-sibling::report/@year >= @year)
and not(following-sibling::report/@year > @year)]/name" />
示例XML:
<reports>
<report year="2012 Q4">
<name>X</name>
</report>
<report year="2011 Q4">
<name>Y</name>
</company>
</reports>
预期输出:X。
答案 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