我正在尝试从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>
日期格式正确以支持排序和检索,问题是填充变量后我无法找到如何访问其值:
答案 0 :(得分:0)
如果您使用的是XSLT 2.0,则可以使用min
和max
函数来完成这项工作。 XSLT 1.0没有这些功能,但你可以通过这样做来作弊(对于大型输入可能效率相当低,但它有效):
<xsl:variable name="startDate" select="string(//StartDate[not(. > //StartDate)])" />
和endDate类似。这里的诀窍是你正在寻找没有 d 大于的其他StartDate的StartDate d 。