使用xslt识别xml文件中的重复元素
我需要使用xslt来识别并列出xml文件中的所有重复元素,基于标签的父元素为//field@name=“partya”。有没有一个简单的方法来实现这一点?下面给出了xml使用xslt识别xml文件中的重复元素,xslt,duplicates,Xslt,Duplicates,我需要使用xslt来识别并列出xml文件中的所有重复元素,基于标签的父元素为//field@name=“partya”。有没有一个简单的方法来实现这一点?下面给出了xml <table> <entry> <display> <field name="partya"> <label>Abi</label> </field>
<table>
<entry>
<display>
<field name="partya">
<label>Abi</label>
</field>
<field name="partyb">
<label>Seddon</label>
</field>
<field name="validation-type">
<label>auto-valid</label>
</field>
...
</entry>
<entry>
<display>
<field name="partya">
<label>Abi</label>
</field>
阿比
塞登
自动生效
...
阿比
在XSLT 2或3中,您可以对这些元素进行分组,并检查current-group()中是否有多个元素。
:
在XSLT 1中,可以使用Muenchian分组并检查组中是否有多个项:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:key name="group" match="field[@name = 'partya']/label" use="."/>
<xsl:template match="/">
<xsl:apply-templates select="//field[@name = 'partya']/label[key('group', .)[2]][generate-id() = generate-id(key('group', .)[1])]"/>
</xsl:template>
<xsl:template match="label">
<xsl:if test="position() > 1"> </xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
任何XSLT教科书或此处的许多问题都会讨论识别重复项。你试过什么吗?您使用哪个XSLT版本?您正在查找重复的标签元素吗?或者在字段
元素中可以有其他元素,其名称
属性为partya
?我尝试过使用xslt:key,但没有走多远(我有点不习惯),并且还研究了这里的问题。我希望找到标签中的pcdata在同一上下文中复制到文件中其他地方的位置。不,这是这种类型的唯一结构。再次感谢@Martin Honnen的回复;但是,我需要进一步完善搜索。我正在搜索表中的重复条目,但要获得更准确的结果列表,我需要使用partya和partyb值组合,因为存在复制partya的真实实例。有什么想法吗?问一个新问题,包括必要的细节和你解决问题的意图。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:key name="group" match="field[@name = 'partya']/label" use="."/>
<xsl:template match="/">
<xsl:apply-templates select="//field[@name = 'partya']/label[key('group', .)[2]][generate-id() = generate-id(key('group', .)[1])]"/>
</xsl:template>
<xsl:template match="label">
<xsl:if test="position() > 1"> </xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>