Xml 如果发现两个相同的元素,则删除转换中的一个元素
我使用XSLT一次转换多个文档。这些文档可能包含以下元素: 或者他们中的一些人同时拥有和 在这种情况下,除了标题、链接、内容等标准元素外,一些输出的文档还有两倍于一个元素 这里的问题是,如果和在同一个目录中找到,我如何删除它 这是XSLT的标题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:
<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/>