我需要在全局变量中使用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>
答案 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>
在你的例子中。