XSLT:消除集合中具有合格节点的 XML 节点 (XSLT 1.0)

问题描述 投票:0回答:1

假设我有以下 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>

这是我会用钥匙做的事情吗?

xml xslt xslt-1.0
1个回答
0
投票

此 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>
© www.soinside.com 2019 - 2024. All rights reserved.