在 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。