[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] xsl transform on xml with namespaces returns no output


Subject: Re: [xsl] xsl transform on xml with namespaces returns no output
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Thu, 06 Aug 2009 13:17:18 +0200

Raveendran, Reshma wrote:

I want to apply xsl on the xml below to get a transformed xml as shown
below.

Source xml ---

<input xmlns="http://tempuri.org/">
<InputParams
xmlns="http://schemas.datacontract.org/2004/07/GenericQuery">
<anyType xsi:type="q1:ResultSpecPagination"
xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xmlns:q1="urn:cbc:message"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PageSize xmlns="">10</PageSize> </anyType>
<anyType xsi:type="q2:AccountFilter"
xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xmlns:q2="urn:cbc:clientinfo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AccountFilter xmlns="">
<O>101</O> <F>173</A> </AccountFilter>
</anyType>
<anyType xsi:type="xsd:string"
xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">677</anyType> <anyType xsi:type="xsd:string"
xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">A</anyType> </InputParams>
</input>


Expected Result:
- <pSearch xmlns="http://tempuri.org/">
- <p1>
<PageSize xmlns="">10</PageSize> </p1>
- <p2>
-<AccountFilter xmlns="">
<O>101</O> <F>173</F> </AccountFilter>
</p2>
<p3>677</p3> <p4>A</p4> </pSearch>

With XSLT 2.0 you can prevent namespaces from being copied:


<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:df="http://tempuri.org/"
  xmlns="http://tempuri.org/"
  xmlns:gq="http://schemas.datacontract.org/2004/07/GenericQuery"
  xmlns:sa="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
  exclude-result-prefixes="df gq sa"
  version="2.0">

<xsl:output indent="yes"/>

  <xsl:template match="df:input">
    <pSearch>
      <xsl:apply-templates select="gq:InputParams/sa:anyType"/>
    </pSearch>
  </xsl:template>

<xsl:template match="sa:anyType">
<xsl:element name="p{position()}">
<xsl:copy-of select="node()[normalize-space()]" copy-namespaces="no"/>
</xsl:element>
</xsl:template>


</xsl:stylesheet>

That should do what you want.

--

	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/


Current Thread
Keywords