Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 我需要删除完全匹配的重复元素_Xslt - Fatal编程技术网

Xslt 我需要删除完全匹配的重复元素

Xslt 我需要删除完全匹配的重复元素,xslt,Xslt,我有一个输入xml,如下所示。我的目标是删除完全匹配的重复元素 输入xml <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

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

输入xml

<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>

http://purl.org/dc/elements/1.1/
http://www.tso.co.uk/assets/namespace/gazette
http://www.w3.org/1999/XSL/Transform
http://www.w3.org/2005/Atom
http://www.oxygenxml.com/ns/doc/xsl 
http://www.w3.org/2001/XMLSchema
http://www.w3.org/1999/xhtml
http://www.w3.org/2005/Atom
http://www.oxygenxml.com/ns/doc/xsl
http://www.w3.org/2001/XMLSchema
http://www.w3.org/1999/xhtml
http://www.w3.org/2005/Atom
http://www.w3.org/2001/XMLSchema
http://www.tso.co.uk/assets/namespace/gazette
http://www.tso.co.uk/assets/namespace/gazette
[来自上述输入xml片段]的预期输出应如下所示:

<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>

http://purl.org/dc/elements/1.1/
http://www.tso.co.uk/assets/namespace/gazette
http://www.w3.org/1999/XSL/Transform
http://www.w3.org/2005/Atom
http://www.oxygenxml.com/ns/doc/xsl 
http://www.w3.org/2001/XMLSchema
http://www.w3.org/1999/xhtml
http://www.tso.co.uk/assets/namespace/gazette
我需要一个xslt代码来实现这一点。
有什么想法吗?请

这可以解释为分组问题-您希望根据元素的
前缀
属性及其字符串值的组合对元素进行分组,然后只保留每个组中的第一个元素。在XSLT2.0中,这对于每个组来说都是一个简单的

<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技术

<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>


(这假设您的文档中只有一个
名称空间
元素,如果您有多个,则该技术仍然有效,但您需要一个更复杂的键,包括
生成id(…)
,以按父级而不是按文档生成组).

到目前为止,您已经问了12个问题,但没有接受任何答案-如果您回去并找到任何您满意的答案,您可能会得到更好的回答。接受答案是奖励帮助你的人的一种方式,目前看来你对别人给你的帮助从来都不满意,这不是鼓励人们将来帮助你的好方法。您好,
请接受我对此的道歉,并感谢此链接。事实上,我不知道该如何接受这个答案。每当我得到正确的答案时,我都认为答案会被别人评估,所以,我一直在等待。只是现在,我通过你的链接才明白<我为我的愚蠢感到抱歉
。从今以后,我相信这种事不会再发生了。现在,我接受了帮助我的正确答案。非常感谢您的信息和帮助。