Extract a subset of XML file using XSL

2020-03-01 09:52发布

I have this XML file:

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

And I want the output to be:

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

My current XSL file is including also "ResponseParameters" tag, which I do not want.

EDIT: note that the node className is dynamic. I do not know what will be this name at runtime.

<?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>

标签: xml xslt
3条回答
来,给爷笑一个
2楼-- · 2020-03-01 10:28
<xsl:copy-of select="Response/ResponseParameters//*"/>
查看更多
祖国的老花朵
3楼-- · 2020-03-01 10:38

Use :

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

The "//" abbreviation is very expensive (causes the complete XML document to be scanned), and should be avoided.

查看更多
Animai°情兽
4楼-- · 2020-03-01 10:42

One way is to pass a parameter containing the node name into the XSLT and use the parameter passed in with the name() function to match the dynamic node.

Edit:

But in this simple case either of the other answers suggesting ResponseParameters//* or ResponseParameters/* are a far simpler solution.

查看更多
登录 后发表回答