我正在获取多个ReplyDTO节点并复制estimateNo字段。 要求是,我们必须找到我们是否得到任何重复的估计值,如果我们得到任何重复的估计值,那么检查该特定节点“ReplyDTO”的creationDate和creationTime并获得最新的估计数。
如何使用xslt获取估算数字?
示例有效负载:
<replyelement xmlns:ns1="http://some.url">
<ns1:ReplyDTO>
<ns1:creationDate>20160404</ns1:creationDate>
<ns1:creationTime>094843</ns1:creationTime>
<ns1:estimateNo>1234</ns1:estimateNo>
<ns1:versionNo>006</ns1:versionNo>
</ns1:ReplyDTO>
<ns1:ReplyDTO>
<ns1:creationDate>20160404</ns1:creationDate>
<ns1:creationTime>094844</ns1:creationTime>
<ns1:estimateNo>5678</ns1:estimateNo>
<ns1:versionNo>006</ns1:versionNo>
</ns1:ReplyDTO>
<ns1:ReplyDTO>
<ns1:creationDate>20160404</ns1:creationDate>
<ns1:creationTime>094843</ns1:creationTime>
<ns1:estimateNo>5678</ns1:estimateNo>
<ns1:versionNo>006</ns1:versionNo>
</ns1:ReplyDTO>
<ns1:ReplyDTO>
<ns1:creationDate>20160404</ns1:creationDate>
<ns1:creationTime>094843</ns1:creationTime>
<ns1:estimateNo>1234</ns1:estimateNo>
<ns1:versionNo>006</ns1:versionNo>
</ns1:ReplyDTO>
</replyelement>
答案 0 :(得分:0)
以下XSLT-2.0模板复制每个ns1:estimateNo
元素的最新内容。不幸的是,您的示例不是很好,因为所有ns1:ReplyDTO
都具有相同的ns1:creationDate
。因此,如果日期相同,则根据ns1:creationTime
选择,首先是最大的数字。这是通过xsl:sort
中的两个perform-sort
来实现的。 current-group()
选择所选的所有不同ns1:estimateNo
元素 - 排序后 - 第一个$estimates/*[1]
。
<xsl:template match="ns1:replyelement>
<xsl:for-each-group select="ns1:ReplyDTO" group-by="ns1:estimateNo">
<xsl:variable name="estimates">
<xsl:perform-sort select="current-group()">
<xsl:sort select="ns1:creationDate" order="descending" />
<xsl:sort select="ns1:creationTime" order="descending" />
</xsl:perform-sort>
</xsl:variable>
<xsl:copy-of select="$estimates/*[1]" />
</xsl:for-each-group>
</xsl:template>
输出为:
<ns1:ReplyDTO>
<ns1:creationDate>20160404</ns1:creationDate>
<ns1:creationTime>194843</ns1:creationTime>
<ns1:estimateNo>1234</ns1:estimateNo>
<ns1:versionNo>006</ns1:versionNo>
</ns1:ReplyDTO>
<ns1:ReplyDTO>
<ns1:creationDate>20160404</ns1:creationDate>
<ns1:creationTime>094844</ns1:creationTime>
<ns1:estimateNo>5678</ns1:estimateNo>
<ns1:versionNo>006</ns1:versionNo>
</ns1:ReplyDTO>
确保在XML和XSLT中都定义了名称空间ns1
。