2009-02-25 11 views
8

Mam ten plik XML:Wyodrębnianie podzbiór pliku XML przy użyciu XSL

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

I chcę wyjście będzie:

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

Mój obecny plik XSL jest w tym również "ResponseParameters" tag , którego nie chcę.

EDYCJA: Zwróć uwagę, że węzeł nazwa_klasy jest dynamiczny. Nie wiem, jaka będzie ta nazwa w czasie wykonywania.

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

Odpowiedz

12

Zastosowanie:

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

Skrót "//" jest bardzo drogie (powoduje kompletny dokument XML mają być skanowane), i należy unikać.

0

Jeden sposób przekazać parametr zawierający nazwę węzła do XSLT i wykorzystywać parametr przekazywany przy użyciu funkcji nazwa(), w celu dopasowania do węzła dynamiki.

Edit:

Ale w tym prostym przypadku, gdy którakolwiek z pozostałych odpowiedzi sugerujących ResponseParameters // * lub ResponseParameters/* są znacznie prostsze rozwiązanie.

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