我有一个与此类似的XML:
<elements>
<element>
<value>1</value>
</element>
<element>
<value>1</value>
</element>
</elements>
如果多个<element>
的值为1,我想跳过所有<element>
个元素。换句话说,我的新XML结构不允许两个或多个<element>
元素具有相同的<value>
值。
有没有办法让XSL实现这个目标? “前面”测试似乎不是我需要的,所以我可以就如何处理这个问题使用一些建议。
答案 0 :(得分:0)
以下XSLT-1.0样式表会删除所有出现的<element>
元素(如果它们出现多次)。 标识模板只复制XML的其余部分。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="doubles" match="element" use="value" />
<xsl:template match="text()" />
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="element">
<xsl:if test="count(key('doubles',value)) < 2">
<xsl:copy-of select="." />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
使用输入XML,输出为:
<elements>
</elements>