首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要删除完全匹配的dupilciate元素。

我需要删除完全匹配的dupilciate元素。
EN

Stack Overflow用户
提问于 2013-09-03 15:12:22
回答 1查看 61关注 0票数 0

我的输入xml如下所示。我的目标是删除从一个到另一个完全匹配的重复元素。

输入xml

代码语言:javascript
复制
<namespaces>
<namespace prefix="dc">http://purl.org/dc/elements/1.1/</namespace>
<namespace prefix="gz">http://www.tso.co.uk/assets/namespace/gazette</namespace>
<namespace prefix="xsl">http://www.w3.org/1999/XSL/Transform</namespace>
<namespace prefix="atom">http://www.w3.org/2005/Atom</namespace>
<namespace prefix="xd">http://www.oxygenxml.com/ns/doc/xsl</namespace> 
<namespace prefix="xs">http://www.w3.org/2001/XMLSchema</namespace>
<namespace prefix="xhtml">http://www.w3.org/1999/xhtml</namespace>
<namespace prefix="atom">http://www.w3.org/2005/Atom</namespace>
<namespace prefix="xd">http://www.oxygenxml.com/ns/doc/xsl</namespace>
<namespace prefix="xs">http://www.w3.org/2001/XMLSchema</namespace>
<namespace prefix="xhtml">http://www.w3.org/1999/xhtml</namespace>
<namespace prefix="atom">http://www.w3.org/2005/Atom</namespace>
<namespace prefix="xs">http://www.w3.org/2001/XMLSchema</namespace>
<namespace prefix="gz">http://www.tso.co.uk/assets/namespace/gazette</namespace>
<namespace prefix="gz">http://www.tso.co.uk/assets/namespace/gazette</namespace>
</namespaces>

上面输入的xml片段的预期输出应该如下所示:

代码语言:javascript
复制
<namespaces>
<namespace prefix="dc">http://purl.org/dc/elements/1.1/</namespace>
<namespace prefix="gz">http://www.tso.co.uk/assets/namespace/gazette</namespace>
<namespace prefix="xsl">http://www.w3.org/1999/XSL/Transform</namespace>
<namespace prefix="atom">http://www.w3.org/2005/Atom</namespace>
<namespace prefix="xd">http://www.oxygenxml.com/ns/doc/xsl</namespace> 
<namespace prefix="xs">http://www.w3.org/2001/XMLSchema</namespace>
<namespace prefix="xhtml">http://www.w3.org/1999/xhtml</namespace>
<namespace prefix="gz">http://www.tso.co.uk/assets/namespace/gazette</namespace>
</namespaces>

我需要一个xslt代码来实现这一点。有什么想法吗?请

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 15:15:55

这可以解释为分组问题--您希望根据元素的prefix属性和字符串值的组合对元素进行分组,然后只保留每个组中的第一个元素。在XSLT2.0中,这是一个简单的for-each-group

代码语言:javascript
复制
<xsl:template match="namespaces">
  <namespaces>
    <xsl:for-each-group select="namespace" group-by="concat(@prefix, ':', .)">
      <xsl:sequence select="." />
    </xsl:for-each-group>
  </namespaces>
</xsl:template>

在XSLT1.0中,您可以定义一个键并使用Muenchian技术

代码语言:javascript
复制
<xsl:key name="nsKey" match="namespace" use="concat(@prefix, ':', .)" />

<xsl:template match="namespaces">
  <namespaces>
    <xsl:copy-of select="namespace[
       generate-id() = generate-id(key('nsKey', concat(@prefix, ':', .))[1])]" />
  </namespaces>
</xsl:template>

(这假设您的文档中只有一个namespaces元素,如果您有多个元素,那么该技术仍然有效,但是您需要一个更复杂的键(包括generate-id(..) )来生成每个父类而不是每个文档的组)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18595765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档