我有xml格式的有效负载,我们必须从中删除重复的父节点和dataweave或xslt中的相应子节点。
<ns1:Hierarchy xmlns:ns1="http://www.example.org/Hierarchy" xmlns:ns2="http://www.example.org/HierarchyResult" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ns2:Parent>19543007</ns2:Parent>
<ns2:Children>
<ns2:Children>13277558</ns2:Children>
</ns2:Children>
<ns2:Parent>13277558</ns2:Parent>
<ns2:Children>
<ns2:Children>13599506</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>13601740</ns2:Parent>
<ns2:Children>
<ns2:Children>13277558</ns2:Children>
<ns2:Children>13599506</ns2:Children>
</ns2:Children>
<ns2:Parent>13735926</ns2:Parent>
<ns2:Children>
<ns2:Children>13348972</ns2:Children>
</ns2:Children>
<ns2:Parent>13601740</ns2:Parent>
<ns2:Children>
<ns2:Children>13277558</ns2:Children>
<ns2:Children>13599506</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>99000016191</ns2:Parent>
<ns2:Children>
<ns2:Children>11465977</ns2:Children>
</ns2:Children>
</ns1:Hierarchy>
所需的输出必须如下所示
<ns1:Hierarchy xmlns:ns1="http://www.example.org/Hierarchy" xmlns:ns2="http://www.example.org/HierarchyResult" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ns2:Parent>19543007</ns2:Parent>
<ns2:Children>
<ns2:Children>13277558</ns2:Children>
</ns2:Children>
<ns2:Parent>13277558</ns2:Parent>
<ns2:Children>
<ns2:Children>13599506</ns2:Children>
</ns2:Children>
<ns2:Parent>11465977</ns2:Parent>
<ns2:Children>
<ns2:Children>11580182</ns2:Children>
<ns2:Children>13601740</ns2:Children>
<ns2:Children>13709062</ns2:Children>
<ns2:Children>13731947</ns2:Children>
<ns2:Children>13735926</ns2:Children>
<ns2:Children>14204010</ns2:Children>
<ns2:Children>14209921</ns2:Children>
</ns2:Children>
<ns2:Parent>13601740</ns2:Parent>
<ns2:Children>
<ns2:Children>13277558</ns2:Children>
<ns2:Children>13599506</ns2:Children>
</ns2:Children>
<ns2:Parent>13735926</ns2:Parent>
<ns2:Children>
<ns2:Children>13348972</ns2:Children>
</ns2:Children>
<ns2:Parent>13601740</ns2:Parent>
<ns2:Children>
<ns2:Children>13277558</ns2:Children>
<ns2:Children>13599506</ns2:Children>
</ns2:Children>
对此有任何帮助将受到高度赞赏。我已尝试过dataweave和xslt的各种答案,但可以过滤掉重复的项目。
答案 0 :(得分:2)
匹配ns1:Hierarchy
的模板应该处理子ns2:Parent
元素,仅限于具有特定内容的第一个元素
(从而消除了重复的元素)。
为此,您需要:
key
(我将其命名为parents
)
匹配ns2:Parent
并保存其内容(use="."
)。ns2:Parent
个节点
generate-id ... [1]
谓词为真(脚本中的详细信息)。匹配ns2:Parent
的模板应该:
ns2:Children
元素,但仅限于这些元素
其中第一个兄弟ns2:Parent
是当前的
ns2:Parent
元素。所以整个脚本可能如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.example.org/Hierarchy"
xmlns:ns2="http://www.example.org/HierarchyResult">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="parents" match="ns2:Parent" use="."/>
<xsl:template match="ns1:Hierarchy">
<xsl:copy>
<xsl:apply-templates select="ns2:Parent
[generate-id()=generate-id(key('parents', .)[1])]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns2:Parent">
<xsl:copy-of select="."/>
<xsl:copy-of select="following-sibling::ns2:Children
[generate-id(preceding-sibling::ns2:Parent[1])=generate-id(current())]"/>
</xsl:template>
</xsl:transform>
有关工作示例,请参阅http://xsltransform.net/ei5PwiW