2017-02-06 18 views
0

Wie ersetze ich den Namespace der untergeordneten Elemente in einem XML? Zum Beispiel habe ich diese Quelldatei: AlleÄndern Sie den Namespace des untergeordneten Elements mit xsl

<ns:Parent xmlns:ns="http://test.com"> 
    <ns1:Name xmlns:ns1="http://development.com">John</ns1:Name> 
    <ns:Country>Japan</ns:Country> 
    <ns:Contact>9999999</ns:Contact> 
</ns:Parent> 

Also im Grunde die anderen Felder abgesehen von Namen waren nicht betroffen:

<ns:Parent xmlns:ns="http://test.com"> 
    <ns:Name>John</ns:Name> 
    <ns:Country>Japan</ns:Country> 
    <ns:Contact>9999999</ns:Contact> 
</ns:Parent> 

Meine Ausgabe wie folgt sein sollte.

Antwort

1

Erster Start mit dem identity template, zu behandeln alle Knoten kopieren wollen Sie nicht

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

Dann ändern, nur eine Vorlage hinzufügen ns:Name entsprechen, in dem Sie einen neuen Knoten in Ihren gewünschten Namensraum statt (wobei ns1 auf dem xsl:stylesheet Element definiert)

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

diesen Versuchen XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:ns="http://test.com" 
       xmlns:ns1="http://development.com"> 
    <xsl:output method="xml" indent="yes" /> 

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

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

Danke Tim! Ich werde es ausprobieren! –

+0

Es funktionierte TIM !!! Vielen Dank für diese Lösung !!! –

Verwandte Themen