查找包含日期需要转换为有效日期格式的最新日期的节点

时间:2014-12-08 14:47:05

标签: xslt xslt-2.0

我需要在全局变量中使用xPath,该变量将选择具有最新dateTime(2014-12-02-04:00)的“Policy”节点。不幸的是,Time delimeter是一个短划线而不是'T',所以我不能马上使用max()。如果我尝试使用substring或translate来删除破折号和冒号以简单地比较数字,我会得到错误,该错误表明在这些函数中不能有更多的那个序列。

有没有办法在2014-12-02-04:00格式的时候从根节点评估PolicyEffectiveDate?

/策略/ PolicySummary /策略[2] / PolicyEffectiveDate

XSLT 2.0没问题。另请注意,我无法控制XML格式。感谢。

给出示例XML:

<?xml version="1.0" encoding="UTF-8"?>
<Policies>
    <PolicySummary>
        <Policy>
            <PolicyNumber>123</PolicyNumber>
            <PolicyEffectiveDate>2014-06-01-04:00</PolicyEffectiveDate>
        </Policy>
        <Policy>
            <PolicyNumber>1234</PolicyNumber>
            <PolicyEffectiveDate>2014-12-02-04:00</PolicyEffectiveDate>
        </Policy>
        <Policy>
            <PolicyNumber>12345</PolicyNumber>
            <PolicyEffectiveDate>2014-08-02-04:00</PolicyEffectiveDate>
        </Policy>
    </PolicySummary>
</Policies>

1 个答案:

答案 0 :(得分:1)

您只需将政策按“日期”排序为文本即可。例如:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <xsl:for-each select="Policies/PolicySummary/Policy">
        <xsl:sort select="PolicyEffectiveDate" data-type="text" order="descending"/>
        <xsl:if test="position()=1">
            <xsl:copy-of select="."/>
        </xsl:if>
    </xsl:for-each>
</xsl:template>


</xsl:stylesheet>

将返回:

<?xml version="1.0" encoding="utf-8"?>
<Policy>
  <PolicyNumber>1234</PolicyNumber>
  <PolicyEffectiveDate>2014-12-02-04:00</PolicyEffectiveDate>
</Policy>

在你的例子中。