因此,此元素可能出现在许多元素中,我应该删除特定元素或其后代中的所有元素。我似乎无法弄清楚该如何处理,因为该关系不是“固定的”。因此,我提供了一个例子来阐明我的观点:
输入:
<a>
<b>
<d value="1"></d>
<b/>
<b>
<c>
<d value="2"></d>
<d value="1"></d>
</c>
<d value="1">
<d value="2">
<b/>
</a>
想要的输出:
<a>
<b>
<d value="1"></d>
<b/>
<b>
<c>
<d value="2"></d>
</c>
<b/>
</a>
您会看到输出仅包含第一个值为value =“ 1”或value =“ 2”的元素。 XSL甚至有可能吗?
答案 0 :(得分:1)
您可以在Muenchian grouping上使用变体形式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="d-by-value" match="d" use="@value" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- remove duplicate d's -->
<xsl:template match="d[count(. | key('d-by-value', @value)[1]) != 1]"/>
</xsl:stylesheet>