如何在xml中排除子元素?

时间:2013-01-31 05:08:00

标签: templates apply-templates

我有以下xml:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
    <phone type='home'>203-555-1212</phone>
    <phone type='fax'>203-555-1212</phone>
    <address type='home'>
        <street>12 Main Street</street>
        <city>Southbury</city>
        <state>CT</state>
        <zip>06488</zip>
    </address>
    <firstName>Charles</firstName>
    <lastName>Smithington</lastName>
</person>
<person1>
        <phone type='home'>58-99-44-999</phone>
        <phone type='fax'>5788-9987-3365</phone>
        <address type='home'>
        <street>12 Main Street</street>
        <city>Park Avenue</city>
        <state>NY</state>
        <zip>10025</zip>
    </address>
        <firstName>Mike</firstName>
        <lastName>Shinoda</lastName>
    </person1>
</persons>

这里我必须排除状态为CT的人的地址字段,而不包括状态为NY的人的地址。

1 个答案:

答案 0 :(得分:0)

<xsl:template match="persons">

    <persons>

        <xsl:apply-templates select="person"/>

        <xsl:apply-templates select="person1"/>

    </persons>

</xsl:template>

<xsl:template match="person">

    <person>
        <xsl:copy-of select="*[name() != 'address']"/>

        <xsl:apply-templates select="address"/>

    </person>

</xsl:template><xsl:template match="person1">

    <person1>

        <xsl:copy-of select="*[name() != 'address']"/>

        <xsl:apply-templates select="address"/>

    </person1>

</xsl:template>

<xsl:template match="address">

<xsl:if test="not(state='CT')">

    <xsl:copy-of select="../address"/>

    </xsl:if>

</xsl:template>

当您在提供的xml上应用上述转换时,它将生成以下结果xml。

<person>
    <phone type="home">203-555-1212</phone>

    <phone type="fax">203-555-1212</phone>

    <firstName>Charles</firstName>

    <lastName>Smithington</lastName>

</person>

<person1>

    <phone type="home">58-99-44-999</phone>

    <phone type="fax">5788-9987-3365</phone>

    <firstName>Mike</firstName>

    <lastName>Shinoda</lastName>

    <address type="home">

        <street>12 Main Street</street>

        <city>Park Avenue</city>

        <state>NY</state>

        <zip>10025</zip>

    </address>

</person1>