xslt复制xml的一部分而不使用xsl:copy

时间:2016-11-28 05:54:46

标签: xml xslt copy

我试图在不使用xsl:copy的情况下复制此xml代码的part(所有包含“a”的元素)。

XML代码:

<?xml-stylesheet href="mydata.xsl" type="text/xsl" ?>
    <a>
        <ab x="x"><b>Test</b><a>z</a></ab>
        <z x="x"><a>z</a></z>
    </a>

期望的结果:

<a>
    <ab x="x"><a>z</a></ab>
</a>

我已经设法使用xsl:copy获得了预期的结果(见下文),但不确定如何更改它以使其不包含该结果。可能使用xsl:element?任何提示?提前谢谢!

使用xsl:copy

<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

        <xsl:template match="a | @* |ab">
            <xsl:copy>
                <xsl:apply-templates select="node() | @*"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="b|z"/>
    </xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

试试这个:

<xsl:template match="*">
    <xsl:element name="{name()}">
        <xsl:apply-templates select="node()|@*"/>
    </xsl:element>
</xsl:template> 

<xsl:template match="@*">
    <xsl:attribute name="{name()}">
        <xsl:value-of select="."/>
    </xsl:attribute>        
</xsl:template>

<xsl:template match="text()">
    <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="*[not(contains(name(), 'a'))]"/>