我正计算for-each中的最大日期@target_date_calc_end
,但我有两个嵌套for-each,这是一个问题。
概述: 我有这个XML:
<asset>
<child_asset_rel child_asset="124510"/>
<child_asset_rel child_asset="124509"/>
<child_asset_rel child_asset="124508"/>
<child_asset_rel child_asset="124511"/>
<child_asset_rel child_asset="124506"/>
<child_asset_rel child_asset="124495"/>
</asset>
每个子节点通过child_asset=" "
引用另一个XML文件,其格式为:
<asset id="124510">
<schedule_step target_date_calc_end="2015-07-07T22:00:00Z"/>
<schedule_step target_date_calc_end="2015-08-17T22:00:00Z"/>
<schedule_step target_date_calc_end="2015-08-20T21:59:00Z"/>
<schedule_step target_date_calc_end="2015-08-20T21:59:00Z"/>
<schedule_step target_date_calc_end="2015-07-15T22:00:00Z"/>
</asset>
有几个日期target_date_calc_end="..."
。
我想遍历所有节点,加载子文件并计算文件的最大日期。
这是我的尝试:
<xsl:template match="/">
<xsl:for-each select="$asset/child_asset_rel/@child_asset">
<xsl:variable name="childAssetXML">
<xsl:copy-of select="cs:get-asset(.)"/>
</xsl:variable>
<xsl:variable name="endDate">
<xsl:for-each select="$childAssetXML/asset/schedule_step/@target_date_calc_end">
<xsl:sort select="." order="descending"/>
<xsl:if test="position() = 1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$endDate"/>
</xsl:for-each>
</xsl:template>
在第一个for-each()
中完成的第一步是寻找
儿童。我得到一个ID并使用函数get-asset()
来获取子文件的XML,该文件存储在childAssetXML
中。
我在for-each的每次迭代中正确地获取了endDate
变量中每个子节点的最大日期,但是在所有迭代之后我无法获得endDate
的最大值。我得到的输出是内循环的最后一次迭代的最大值。
有什么想法吗?
答案 0 :(得分:0)
尝试max($asset/child_asset_rel/cs:get-asset(@child_asset)/asset/schedule_step/xs:dateTime(@target_date_calc_end))
或max($asset/child_asset_rel/cs:get-asset(@child_asset)/schedule_step/xs:dateTime(@target_date_calc_end))
,具体取决于您的函数cs:get-asset
返回的内容。