2009-02-25 18 views
8

ho questo file XML:Estrarre un sottoinsieme di file XML usando XSL

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

E voglio l'output di essere:

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

mio file XSL corrente è compreso anche tag "ResponseParameters" , che non voglio

MODIFICA: si noti che il nodo className è dinamico. Non so quale sarà questo nome in fase di 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> 

risposta

12

Uso:

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

Il "//" sigla è molto costoso (fa sì che il documento XML completo da sottoporre a scansione), e dovrebbe essere evitato.

0

Un modo è quello di passare un parametro contenente il nome nodo nel XSLT e utilizzare il parametro passato con il nome funzione() corrisponda al nodo dinamico.

Edit:

Ma in questo caso semplice o delle altre risposte suggeriscono ResponseParameters // * o ResponseParameters/* sono una soluzione molto più semplice.

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