2009-02-25 13 views
8

J'ai ce fichier XML:Extrait un sous-ensemble du fichier XML en utilisant XSL

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

Et je veux que la sortie soit:

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

Mon fichier en cours XSL est compris également tag "de ResponseParameters" , que je ne veux pas.

EDIT: notez que le noeud className est dynamique. Je ne sais pas quel sera ce nom à l'exécution.

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

Répondre

12

Utilisation:

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

L'abréviation "//" est très cher (provoque le document XML complet à numériser), et devrait être évitée.

0

Une façon consiste à passer un paramètre contenant le nom du noeud dans le XSLT et en utilisant le paramètre transmis avec la fonction name() en fonction du noeud dynamique.

Edit:

Mais dans ce cas simple ou l'autre des autres réponses suggérant ResponseParameters // * ou ResponseParameters/* sont une solution beaucoup plus simple.

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