Re: [xsl] Replacing default namespace

Subject: Re: [xsl] Replacing default namespace
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Mon, 02 Jul 2007 18:42:07 +0200
Scott Sauyet wrote:

In any case, a reduced version of the input WSDL is below. I want the output to be exactly the same except for the changes to the root tag:

    <definitions
        targetNamespace="http://my.new.namespace/";
        xmlns:tns="http://my.new.namespace/";

Here is an XSLT 1.0 stylesheet, I think it does what you want with Saxon 6.5.5:


<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  version="1.0"
  xmlns:tns="http://my.new.namespace/";
  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
  xmlns:xs="http://www.w3.org/2001/XMLSchema";
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
  xmlns:ro="urn:Databox"
  xmlns:n1="http://schemas.xmlsoap.org/wsdl/";
  xmlns="http://schemas.xmlsoap.org/wsdl/";>

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

  <xsl:template match="/wsdl:definitions">
    <xsl:element name="{name()}" namespace="{namespace-uri()}">
      <xsl:copy-of select="document('')/*/namespace::*"/>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
  </xsl:template>

<xsl:template match="wsdl:definitions/@targetNamespace">
<xsl:attribute name="targetNamespace"><xsl:value-of select="document('')/*/namespace::tns"/></xsl:attribute>
</xsl:template>


  <xsl:template match="@* | comment() | processing-instruction()">
    <xsl:copy-of select="."/>
  </xsl:template>

</xsl:stylesheet>


--


	Martin Honnen
	http://JavaScript.FAQTs.com/

Current Thread