假设我有以下 XML:
<School>
<Class name="Biology"/>
<Class name="Math"/>
<Class name="English"/>
<Student className="Biology" Name="Chris"/>
<Student className="English" Name="Kevin"/>
<Student className="Biology" Name="Tania"/>
<Student className="Math" Name="Kevin"/>
<Student className="English" Name="Tania"/>
</School>
我想做的(在 XSLT 1.0 中)是消除名为“Tania”的“Student”节点以及通过“className”与它们相关的类节点。所以会产生这样的输出:
<School>
<Class name="Math"/>
<Student className="Math" Name="Kevin"/>
</School>
这是我会用钥匙做的事情吗?
此 XSLT 将产生所需的结果
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" standalone="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="st" match="Student" use="@Name"/>
<xsl:template match="Class[@name = key('st', 'Tania')/@className]"/>
<xsl:template match="Student[@className = key('st', 'Tania')/@className]"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>