我的输入是:
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<MDMInput>
<Input>
<WileyProductCategory>PJ</WileyProductCategory>
<FullfilmentType>subscription</FullfilmentType>
<Frequency/>
</Input>
<Input>
<WileyProductCategory>EJ</WileyProductCategory>
<FullfilmentType>onetime</FullfilmentType>
<Frequency/>
</Input>
<Input>
<WileyProductCategory>EJ</WileyProductCategory>
<FullfilmentType>subscription</FullfilmentType>
<Frequency/>
</Input>
<Input>
<WileyProductCategory>EJ</WileyProductCategory>
<FullfilmentType>subscription</FullfilmentType>
<Frequency/>
</Input>
</MDMInput>
</root>
所需的输出是:
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<MDMInput>
<Input>
<WileyProductCategory>PJ</WileyProductCategory>
<FullfilmentType>subscription</FullfilmentType>
<Frequency/>
</Input>
<Input>
<WileyProductCategory>EJ</WileyProductCategory>
<FullfilmentType>onetime</FullfilmentType>
<Frequency/>
</Input>
<Input>
<WileyProductCategory>EJ</WileyProductCategory>
<FullfilmentType>subscription</FullfilmentType>
<Frequency/>
</Input>
</MDMInput>
</root>
在输入XML中,2个输入节点具有相同的值,用于&#39; WileyProductCategory&#39;和&#39; FullfilmentType&#39;。 我的要求是删除所有此类重复标记,并仅保留其中一个重复标记。
请帮助。 Niharika
答案 0 :(得分:0)
您可以通过标准&#34; Muenchian分组&#34;的变化来解决这个问题。技术 - 定义一个键,它将Input
个共享相同子值的元素组合在一起
<xsl:key name="inputGroup" match="Input"
use="concat(WileyProductCategory, '|', FullfilmentType)" />
然后给定一个特定的类别/类型对,您可以使用
确定文档中具有此键值的第一个元素key('inputGroup', concat(WileyProductCategory, '|', FullfilmentType))[1]
为了将它们联系在一起,我们从一个&#34;身份&#34;开始。转换(将输入复制到输出,除非使用更具体的模板覆盖它),然后添加模板以忽略除每个组中的第一个元素之外的所有元素。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*" />
<xsl:output indent="yes" />
<xsl:key name="inputGroup" match="Input"
use="concat(WileyProductCategory, '|', FullfilmentType)" />
<!-- identity template -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<!-- ignore second and subsequent elements in each key group -->
<xsl:template match="Input[generate-id() != generate-id(key('inputGroup',
concat(WileyProductCategory, '|', FullfilmentType))[1])]" />
</xsl:stylesheet>
此处generate-id()
是模板尝试匹配的Input
元素的唯一标识符,generate-id(key(....)[1])
是文档中与同一个键匹配的第一个元素的唯一标识符值。