2017-04-06 1 views
0

Ich brauche Hilfe beim Entfernen des Namespace nur aus dem Stammelement mit XSLT.So entfernen Sie den Namespace nur des Stammelements eines XML

Aktuell:

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:root xmlns:ns0="dfsafas.fsafs"> 
    <ns0:element1>abda</ns0:element1> 
    <ns0:element2>abda</ns0:element2> 
    <ns0:element3>abda</ns0:element3> 
</ns0:root> 

Erwartet:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:ns0="dfsafas.fsafs"> 
    <ns0:element1>abda</ns0:element1> 
    <ns0:element2>abda</ns0:element2> 
    <ns0:element3>abda</ns0:element3> 
</root> 

bekam ich eine Lösung, die alle Namespaces für das Entfernen, aber Voraussetzung ist nur für das erste Element.

Das ist mein XSLT-1.0-Ansatz:

<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" /> 
    <xsl:template match=""> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@ | node()"/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+4

Bitte senden Sie das XSLT Sie versucht. Und erwähnen Sie die Version von XSLT, die Sie verwenden. –

+0

Ich habe den XSLT-1.0-Code aus den Kommentaren eingefügt und auch den Titel und einige Schreibweisen geändert. – zx485

Antwort

0

Dies wird für Sie arbeiten. Beachten Sie, dass der URI des Namespace nun in den Knoten des Elements * zurückgegeben wird.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:ns0="dfsafas.fsafs" 
exclude-result-prefixes="msxsl"> 
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" /> 

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

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

+0

Ihre ursprüngliche Antwort war viel besser. Jetzt hast du zu viel Code. –

+0

Hallo, ich habe den Code geändert, um es generisch zu machen. Diese XSLT entfernt also den Namespace vom Wurzelknoten eines beliebigen XML. Nachdem ich darüber nachgedacht hatte, dachte ich, dass der Fragesteller danach gefragt hatte. Das heißt, fühlen Sie sich frei, meine ursprüngliche Antwort neu zu veröffentlichen. – Bluewood66

+0

"* Entferne den Namespace vom Wurzelknoten eines beliebigen XML *" Das kann auch mit einer einzelnen Vorlage (zusätzlich zur * identity transform * Vorlage) und ohne Verwendung von Modi geschehen. Verwenden Sie einfach ''. –

Verwandte Themen