Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xslt识别xml文件中的重复元素_Xslt_Duplicates - Fatal编程技术网

使用xslt识别xml文件中的重复元素

使用xslt识别xml文件中的重复元素,xslt,duplicates,Xslt,Duplicates,我需要使用xslt来识别并列出xml文件中的所有重复元素,基于标签的父元素为//field@name=“partya”。有没有一个简单的方法来实现这一点?下面给出了xml <table> <entry> <display> <field name="partya"> <label>Abi</label> </field>

我需要使用xslt来识别并列出xml文件中的所有重复元素,基于标签的父元素为//field@name=“partya”。有没有一个简单的方法来实现这一点?下面给出了xml

    <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">&#10;</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">&#10;</xsl:if>
      <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>