在 for-each XSLT 中计算的最大值
max of a value calculated in for-each XSLT
我正在计算 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 节点通过 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="..."
。
我想遍历所有节点,加载 children 文件并计算文件的最大日期。
这是我的尝试:
<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()
中完成的第一步是寻找
child仁。我得到一个ID并使用函数get-asset()
获取child文件的XML,它存储在childAssetXML
.
我在 for-each 的每次迭代中正确地获取了 endDate
变量中每个 child 的最大日期,但我无法获取 [=20] 的最大值=] 在所有迭代之后。我得到的输出是内循环最后一次迭代的最大值。
有什么想法吗?
尝试 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
returns。
我正在计算 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 节点通过 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="..."
。
我想遍历所有节点,加载 children 文件并计算文件的最大日期。
这是我的尝试:
<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()
中完成的第一步是寻找
child仁。我得到一个ID并使用函数get-asset()
获取child文件的XML,它存储在childAssetXML
.
我在 for-each 的每次迭代中正确地获取了 endDate
变量中每个 child 的最大日期,但我无法获取 [=20] 的最大值=] 在所有迭代之后。我得到的输出是内循环最后一次迭代的最大值。
有什么想法吗?
尝试 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
returns。