xml - 如何使用 xslt 中的每个组
问题描述
我想通过使用“for each group”删除我的 xml 中的重复值(条形码)
这是我的xml
<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
<multimap:Message1>
<bookRoot>
<bookRecord>
<barcode>1111</barcode>
<modifiedDate>2019-04-04T05:11:59.000Z</modifiedDate>
</bookRecord>
<bookRecord>
<barcode>2222</barcode>
<modifiedDate>2019-11-07T15:00:23.000Z</modifiedDate>
</bookRecord>
<bookRecord>
<barcode>1111</barcode>
<modifiedDate>2020-01-11T05:51:23.000Z</modifiedDate>
</bookRecord>
</bookRoot>
<bookRoot>
<bookRecord>
<barcode>1111</barcode>
<modifiedDate>2019-09-15T15:16:09.000Z</modifiedDate>
</bookRecord>
<bookRecord>
<barcode>9999</barcode>
<modifiedDate>2019-12-31T10:00:23.000Z</modifiedDate>
</bookRecord>
</bookRoot>
</multimap:Message1>
</multimap:Messages>
这是我预期的 xml
<?xml version="1.0" encoding="UTF-8"?>
<storeRoot>
<storeRecord>1111</storeRecord>
<storeRecord>2222</storeRecord>
<storeRecord>9999</storeRecord>
</storeRoot>
我尝试按条形码对每个组使用
<xsl:stylesheet version="2.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="bookRoot">
<storeRoot>
<xsl:for-each-group select="bookRecord" group-by="barcode">
<xsl:sort select='barcode' order="ascending" data-type="number"/>
<storeRecord>
<xsl:apply-templates select="barcode"/>
</storeRecord>
</xsl:for-each-group>
</storeRoot>
</xsl:template>
</xsl:stylesheet>
这是我的实际结果。
<?xml version="1.0" encoding="UTF-8"?>
<storeRoot>
<storeRecord>1111</storeRecord>
<storeRecord>2222</storeRecord>
</storeRoot>
<storeRoot>
<storeRecord>1111</storeRecord>
<storeRecord>9999</storeRecord>
</storeRoot>
我仍然得到重复记录“1111”。如何删除重复的条形码记录?
解决方案
您的模板匹配bookRoot
- 输入 XML 中有两个 bookRoot 实例。因此,您将获得 的两个实例storeRoot
,每个实例都对自己的bookRoot
节点子集进行分组。
请尝试:
<xsl:template match="/">
<storeRoot>
<xsl:for-each-group select="//bookRecord" group-by="barcode">
<xsl:sort select='barcode' order="ascending" data-type="number"/>
<storeRecord>
<xsl:apply-templates select="barcode"/>
</storeRecord>
</xsl:for-each-group>
</storeRoot>
</xsl:template>
推荐阅读
- node.js - mongodb使用nodejs和express的一对多关系
- xaml - Xamarin.Forms。Collectionview 在其内容之后添加了很多额外的空白
- python - 时间戳:无法将 NumPy 数组转换为张量
- javascript - 浏览器扩展 - 使用内容脚本将所选文本替换为 ajax 响应
- javascript - 带有 Express 的 Node.JS:错误:监听 EADDRINUSE:地址已在使用中
- android - 自定义列表项中按钮的位置
- javascript - 鼠标滚轮滚动代码上的 Slick Slider 不起作用
- excel - 从以下公式中排除星期日
- node.js - 当我使用 brew info 节点时,为什么我会在节点的一些依赖项旁边看到一个“x”刻度线?
- nuxt.js - 错误 400:Nuxt.js 中的 redirect_uri_mismatch