xslt - XSLT 对节点的重复元素进行分组并作为请求传递
问题描述
我得到多个ReplyDTO 节点和重复的estimateNo 字段。要求是,我们必须找出我们是否得到任何重复的estimateNo,如果我们得到任何重复的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>
解决方案
下面的 XSLT-2.0 模板复制了每个ns1:estimateNo
元素的最新版本。不幸的是,您的示例不是一个很好的示例,因为所有示例都ns1:ReplyDTO
具有相同的ns1:creationDate
. 因此,如果日期相同,则选择基于ns1:creationTime
,数字最大的优先。这是通过 中的两个xsl:sort
s 实现的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>
确保ns1
在 XML 和 XSLT 中都定义了名称空间。
推荐阅读
- c# - 编译此错误时如何解决此错误?
- c - 消息队列 IPC 错误:参数无效
- c# - Elixir - 获取 args 中的值,从 Unity 传递
- xml - 具有相同节点名称的 XML 的 XSD 架构
- c - 在输入中获取一个整数而不会遇到任何错误
- android-studio - 循环遍历 xml 文件并为每个字符串创建一个 Textview
- javascript - 将值编号和图像从选择选项传递给 javascript
- python - Python脚本未打印出请求状态
- javascript - 自定义 ajax 承诺函数签名
- reactjs - 如何从 React 中的父组件调用 onChange 访问内部虚拟 DOM 元素