假设您的 XML 看起来像这样
<record>
<stuff>
<stuff term="foo"/>
<stuff term="bar"/>
<stuff term="test"/>
</stuff>
<other>
<other key="time"/>
<other key="rack"/>
<other key="foo"/>
<other key="fast"/>
</other>
</record>
您可以设置一个键来根据它们的键属性查找其他元素
<xsl:key name="other" match="other/*" use="@key"/>
然后,要选择没有匹配其他元素的stuff元素,您可以像这样使用键
<xsl:apply-templates select="stuff/*[not(key('other', @term))]"/>
尝试以下 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="other" match="other/*" use="@key"/>
<xsl:template match="/*">
<xsl:apply-templates select="stuff/*[not(key('other', @term))]"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于上述 XML 时,输出如下
<stuff term="bar"></stuff>
<stuff term="test"></stuff>