2016-07-27 16 views
0

ursprüngliche AnforderungFetching Elemente zwischen einem Knoten = XSLT

<?xml version="1.0" encoding="utf-8"?> 
<typ:CustomerResponse xmlns:typ="http://xml.mycomp.com/customer/types"> 
<typ:CustomerReturn> 
    <typ:Address> 
     <typ:state>PA</typ:state> 
     <typ:city>Harrisburg</typ:city> 
    </typ:Address> 
    <typ:User> 
     <typ:firstName>test</typ:firstName> 
     <typ:lastName>test</typ:lastName> 
    </typ:User> 
</typ:CustomerReturn> 
</typ:CustomerResponse> 

I XML-Namensraum unter Verwendung der XSLT unten entfernt.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="*"> 
     <xsl:element name="{local-name(.)}"> 
      <xsl:apply-templates select="@* | node()" /> 
     </xsl:element> 
    </xsl:template> 
    <xsl:template match="@*"> 
     <xsl:attribute name="{local-name(.)}"> 
     <xsl:value-of select="." /> 
    </xsl:attribute> 
    </xsl:template> 
    <xsl:template match="@xsi:nil[.='true']"/> 

</xsl:stylesheet> 

Nach der obigen Transformation auf meinem ursprünglichen xml läuft die Namespaces hat ich die unten -

<?xml version="1.0" encoding="utf-8"?> 
<CustomerResponse> 
<CustomerReturn> 
    <Address> 
     <state>PA</state> 
     <city>Harrisburg</city> 
    </Address> 
    <User> 
     <firstName>test</firstName> 
     <lastName>test</lastName> 
    </User> 
</CustomerReturn> 
</CustomerResponse> 

ich die bestehende XSLT-Datei zu erhalten Ausgabe ähnlich unten erweitern möchten.

Ausgang Erwartete

<CustomerResponse> 
     <Address> 
      <state>PA</state> 
      <city>Harrisburg</city> 
     </Address> 
     <User> 
      <firstName>test</firstName> 
      <lastName>test</lastName> 
     </User> 
</CustomerResponse> 
+0

Ihre Frage ist nicht klar. Zeigen Sie die ursprüngliche XML-Eingabe und die erwartete Ausgabe der Umwandlung an. –

+0

Hallo Michael, fügte die erwartete Ausgabe hinzu. –

+1

Bitte zeigen Sie uns auch die ursprüngliche Eingabe. - Ist Ihnen bewusst, dass die von Ihnen gewünschte Ausgabe kein wohlgeformtes XML ist? –

Antwort

2

es auf diese Weise versuchen?

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:typ="http://xml.mycomp.com/customer/types" 
exclude-result-prefixes="typ"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="typ:CustomerReturn"> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 
+0

Danke funktioniert super. Vielen Dank. Kann man erklären, was getan wird? –

+0

Die erste Vorlage erstellt ein entsprechendes Element im No-Namespace für jedes Element im ursprünglichen XML. Dies geschieht rekursiv und durchquert den gesamten Baum von der Wurzel bis zu den Blättern. Die zweite Vorlage überschreibt für 'type: CustomerReturn': Sie setzt die Rekursion fort (durch Aufruf von' '), überspringt aber die Erstellung eines entsprechenden Elements für den aktuellen Knoten. Kinder von 'typ: CustomerReturn' rücken somit in der Hierarchie nach oben und werden Kinder von' CustomerResponse'. - Siehe auch: https://www.w3.org/TR/xslt/#section-Processing-Model –

+0

Vielen Dank, Michael! –