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
Xml 如果发现两个相同的元素,则删除转换中的一个元素_Xml_Xslt - Fatal编程技术网

Xml 如果发现两个相同的元素,则删除转换中的一个元素

Xml 如果发现两个相同的元素,则删除转换中的一个元素,xml,xslt,Xml,Xslt,我使用XSLT一次转换多个文档。这些文档可能包含以下元素: 或者他们中的一些人同时拥有和 在这种情况下,除了标题、链接、内容等标准元素外,一些输出的文档还有两倍于一个元素 这里的问题是,如果和在同一个目录中找到,我如何删除它 这是XSLT的标题 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://www.w3.org/2005/Atom" xmlns:

我使用XSLT一次转换多个文档。这些文档可能包含以下元素: 或者他们中的一些人同时拥有和

在这种情况下,除了标题、链接、内容等标准元素外,一些输出的文档还有两倍于一个元素

这里的问题是,如果和在同一个目录中找到,我如何删除它

这是XSLT的标题

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:a="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
这基本上就是XML

<entry>
<id></id>
<title></title>
<content></content>
<link></link>
<a:updated></a:updated>
<app:edited></app:edited>
</entry> 

正确答案取决于您尚未显示的源XML文档

通常,选择模板执行的方式以及是否选择模板取决于选择该模板的指令,因此请尝试以下操作:

<xsl:apply-templates select=
  "(//*
     [self::a:updated 
     or 
      self::updated 
     or self::app:edited
     ]) 
      [1]
"/>
当将此转换应用于所提供的XML文档时,会对其进行处理,使其格式良好:

<entry xmlns:a="a" xmlns:app="app">
    <id></id>
    <title></title>
    <content></content>
    <link></link>
    <a:updated></a:updated>
    <app:edited></app:edited>
</entry>
所需的正确结果仅在输出中出现一次:


+对于好问题,请向我们展示XML。通常,选择模板执行的方式以及是否选择模板取决于选择该模板的指令。因此,解决方案是只在a:updated,updated,app:edited的其中一个事件上应用模板谢谢你的回答。我试过了,但在XSLT处理器上出现了一个错误。但是,我成功地删除了3个元素中的1个,现在有2个,正如您在我更新的问题中所看到的。我还发布了XML文档。@JohnQ:查看我更新的答案以获得完整的转换-只需复制粘贴并运行它。
<xsl:apply-templates select=
  "(//*
     [self::a:updated 
     or 
      self::updated 
     or self::app:edited
     ]) 
      [1]
"/>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:a="a" xmlns:app="app" exclude-result-prefixes="a app"
 >
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
    <xsl:apply-templates select=
      "(/*/*
         [self::a:updated
         or
          self::updated
         or self::app:edited
         ])
          [1]
    "/>
 </xsl:template>

 <xsl:template match="a:updated | app:edited">
      <posted>
        <xsl:apply-templates select="node() | @*" />
      </posted>
 </xsl:template>
</xsl:stylesheet>
<entry xmlns:a="a" xmlns:app="app">
    <id></id>
    <title></title>
    <content></content>
    <link></link>
    <a:updated></a:updated>
    <app:edited></app:edited>
</entry>
<posted/>