2016-07-20 9 views
0

Wie kann ich das Präfix urn von allen Elementen entfernen, außer vom Wurzelknoten?XSLT entfernt das Präfix von den Elementen, außer vom Wurzelknoten

XML Eingang

<urn:client xmlns:urn='www.testing.com' xmlns:x='http://schemas.xmlsoap.org/soap/envelope/'> 
    <urn:header> 
     <urn:desc1>undefined</urn:desc1> 
     <urn:desc2>undefined</urn:desc2> 
    </urn:header> 
    <urn:itens1> 
     <urn:item1>undefined 
      <urn:name1>undefined</urn:name1> 
      <urn:name2>undefined</urn:name2> 
     </urn:item1> 
    </urn:itens1> 
    <urn:itens2> 
     <urn:item1>undefined 
      <urn:name1>undefined</urn:name1> 
      <urn:name2>undefined</urn:name2> 
     </urn:item1> 
     <urn:item2>undefined 
      <urn:name1>undefined</urn:name1> 
      <urn:name2>undefined</urn:name2> 
     </urn:item2> 
    </urn:itens2> 
</urn:client> 

XML-Ausgabe

<urn:client xmlns:urn='www.testing.com' xmlns:x='http://schemas.xmlsoap.org/soap/envelope/'> 
    <header> 
     <desc1>undefined</desc1> 
     <desc2>undefined</desc2> 
    </header> 
    <itens1> 
     <item1>undefined 
      <name1>undefined</name1> 
      <name2>undefined</name2> 
     </item1> 
    </itens1> 
    <itens2> 
     <item1>undefined 
      <name1>undefined</name1> 
      <name2>undefined</name2> 
     </item1> 
     <item2>undefined 
      <name1>undefined</name1> 
      <name2>undefined</name2> 
     </item2> 
    </itens2> 
</urn:client> 

ich versuchte, mit dem folgenden XSLT-Code

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <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:stylesheet> 

jedoch das Präfix und Namensraum von dem Wurzelknoten ebenfalls entfernt wird, .

Dou Jungs haben irgendwelche ideia?

Tks

Antwort

1

Wie wäre:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<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:copy-of select="@*"/> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/>  
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

Diese Attribute in der XML-Eingabeübernimmt in keiner-Namensraum (wie sie in der Regel sein wird). Tatsächlich hat das gegebene Beispiel überhaupt keine Attribute - Sie könnten also die Anweisung <xsl:copy-of select="@*"/> ganz entfernen.

+0

Ja! Du hast Recht. Es funktioniert jetzt. Danke vielmals. – user1761848