XSLT组复制节点的元素并作为请求传递

时间:2018-05-04 18:07:21

标签: xslt

我正在获取多个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>

1 个答案:

答案 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