2009-02-25 17 views
8

tengo este archivo XML:Extraer un subconjunto de archivo XML utilizando XSL

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

Y quiero que la salida sea:

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

Mi archivo XSL actual está incluyendo también la etiqueta "ResponseParameters" que no quiero

EDITAR: tenga en cuenta que el nodo className es dinámico. No sé cuál será este nombre en tiempo de ejecución.

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

Respuesta

12

Uso:

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

El "//" abreviatura es muy caro (hace que el documento XML completo que va a escanear), y debe evitarse.

0

Una manera es pasar un parámetro que contiene el nombre de nodo en el XSLT y utilizar el parámetro pasado en con la función de nombre() para que coincida con el nodo dinámico.

Editar:

Pero en este caso simple cualquiera de las otras respuestas que sugieren ResponseParameters // * o ResponseParameters/* son una solución mucho más simple.

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