0

XML ソースから最小日付と最大日付を抽出しようとしています。変数にノードセットを取得していますが、ノード内の実際の日付値が必要ですが、それを取得する方法が見つかりません。

ソース XML:

<Info dataSource="source">
<Detail>
    <StartDate>20121211</StartDate>
    <EndDate>20130112</EndDate>
</Detail>
<Detail>
    <StartDate>20121211</StartDate>
    <EndDate>20130112</EndDate>
</Detail>
<Detail>
    <StartDate>20121211</StartDate>
    <EndDate>20130112</EndDate>
</Detail>
<Detail>
    <StartDate>20121218</StartDate>
    <EndDate>20130114</EndDate>
</Detail>
</Info>

XSL コード:

  <xsl:if test="//StartDate != '' and //EndDate != ''">
    <xsl:variable name ="startDate">
      <xsl:for-each select="//StartDate">
        <xsl:sort select="StartDate" data-type="text" order="ascending"/>
        <xsl:if test="position() = 1">
          <xsl:value-of select="." />
        </xsl:if>
      </xsl:for-each>
    </xsl:variable>
    <xsl:variable name ="endDate">
      <xsl:for-each select="//EndDate">
        <xsl:sort select="EndDate" data-type="text" order="descending"/>
        <xsl:if test="position() = 1">
          <xsl:value-of select="." />
        </xsl:if>
      </xsl:for-each>
    </xsl:variable> 
  </xsl:if>

日付は、並べ替えと取得をサポートするために正しくフォーマットされています。問題は、変数が入力されると、それらの値にアクセスする方法が見つからないことです。

4

1 に答える 1

0

XSLT 2.0 を使用している場合は、作業を行う機能がありますminmaxXSLT 1.0 にはこれらの関数はありませんが、これを行うことでごまかすことができます (大きな入力に対しては効率が悪いかもしれませんが、機能します)。

<xsl:variable name="startDate" select="string(//StartDate[not(. > //StartDate)])" />

endDate についても同様です。ここでのトリックは、 dより大きいStartDate が他にないStartDate dを探しているということです。

于 2013-03-07T19:08:23.997 に答える