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 也是如此。这里的诀窍是您正在寻找没有其他 StartDate大于d的 StartDate d 。

于 2013-03-07T19:08:23.997 回答