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 に答える