使用XSL提取XML文件的子集

时间:2009-02-25 16:01:19

标签: xml xslt

我有这个XML文件:

<Response>
    <errorCode>error Code</errorCode>
    <errorMessage>msg</errorMessage>
    <ResponseParameters>
        <className>
            <attribute1>a</attribute1>
            <attribute2>b</attribute2>
        </className>
    </ResponseParameters>
</Response>

我希望输出为:

<className>
    <attribute1>a</attribute1>
    <attribute2>b</attribute2>
</className>

我当前的XSL文件还包含“ResponseParameters”标签,我不想这样做。

编辑:请注意,节点className是动态的。我不知道这个名字在运行时会是什么。

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:output indent="yes" />

    <xsl:template match="/">
        <xsl:copy-of select="//ResponseParameters">
        </xsl:copy-of>
    </xsl:template>
</xsl:stylesheet>

3 个答案:

答案 0 :(得分:14)

使用

<xsl:copy-of select="/Response/ResponseParameters/node()"/>

"//"缩写非常昂贵(导致扫描完整的XML文档),应该避免

答案 1 :(得分:0)

一种方法是将包含节点名称的参数传递给XSLT,并使用传入的参数和name()函数来匹配动态节点。

编辑:

但在这个简单的案例中,建议ResponseParameters // *或ResponseParameters / *的其他答案中的任何一个都是一个更简单的解决方案。

答案 2 :(得分:0)

<xsl:copy-of select="Response/ResponseParameters//*"/>