OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] Strip Soap namespace?

[ Lists Home | Date Index | Thread Index ]

XSL, XSLT and XPath questions would be better posted to the following list:

   http://www.mulberrytech.com/xsl/xsl-list

There are a number of subscribers who would enthusiastically respond to 
such questions.

There is also an *excellent* FAQ at:

   http://www.dpawson.co.uk

Helpful information regarding the Microsoft MSXML DLL can be found at:

   http://www.netcrucible.com/xslt/msxml-faq.htm

There are voluminous resource pages at:

   http://xml.coverpages.org/xsl.html

At 2002-07-29 16:07 -0600, Paul Coleman wrote:
>I have an xml input document as follows:

Your example was corrupted and incomplete, so I tried to guess at what you 
actually have.

>I am trying get just the soap body elements out via XSLT, but I always get 
>the soap ns on the justiceXML element.  My style sheet is as follows:
>
><?xml version="1.0"?>
><xsl:stylesheet version="1.0" 
>xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"; 
>xmlns:xsl=<http://www.w3.org/1999/XSL/Transform>http://www.w3.org/1999/XSL/Transform 
>
>exclude-result-prefixes="soap-env">

Note the exclude-result-prefixes= attribute only prunes unwanted namespace 
nodes from the stylesheet node tree and never has any effect on the source 
node tree.  You still need it in your stylesheet since you need to declare 
the envelope namespace, though my example below doesn't have any literal 
result elements that could bring over the namespace, it might in the future 
so it is best to prepare ahead of time.

><xsl:output method="xml" />
>   <xsl:template match="justiceXML">
>   <xsl:copy-of select="." />

The act of copying an element node from either the source or stylesheet 
tree to the result tree will also copy all of that element's attached 
namespace nodes, of which there will be one for every ancestral namespace 
declaration.  Thus, every element in your justiceXML sub-tree branch will 
drag along a SOAP namespace because the SOAP namespace is declared in an 
element ancestor of the sub-tree.

></xsl:template>
></xsl:stylesheet>
>and my output:
><?xml version="1.0" encoding="UTF-8"?>
><justiceXML xmlns:soap-env=" class="OTrackNameListRequest" 
>type="request"/><payload><person><personName><firstName>MICHAEL</firstName><lastName>MOLEN</lastName><fullName>MICHAEL 
>MOLEN</fullName></personName><personDescription><sex>Male</sex><birthDate>1960-07-11</birthDate></personDescription></person></payload></justiceXML>
>
>Question:  is there a way to supress the soap namespace from the output?

A working example is below, with the XML instance that I tried to divine 
from the non-well-formed examples you gave (even your output quoted above 
isn't well formed).

>Using  exclude-result-prefixes doesn't make any difference.

... by definition.

The solution below will work stripping the SOAP namespace from any 
excerpted body contents, and is not tied specifically to the justiceXML 
element type.

I hope this helps.

................... Ken


T:\ftemp>type justin.xml
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/";>
   <soap-env:Body>
     <justiceXML type="request" class="OTrackNameListRequest">
       <payload>
         <person>
           <personName>
             <firstName>MICHAEL</firstName>
             <lastName>MOLEN</lastName>
             <fullName>MICKEY MOLEN</fullName>
           </personName>
           <personDescription>
             <sex>Male</sex>
             <birthDate>1910-08-01</birthDate>
           </personDescription>
         </person>
       </payload>
     </justiceXML>
   </soap-env:Body>
</soap-env:Envelope>

T:\ftemp>type justin.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/";
                 exclude-result-prefixes="soap-env"
                 version="1.0">

<xsl:template match="/">
   <xsl:apply-templates select="soap-env:Envelope/soap-env:Body/node()"/>
</xsl:template>

<xsl:template match="*"> <!--synthesize element with the input name-->
   <xsl:element name="{name(.)}" namespace="{namespace-uri(.)}">
     <xsl:copy-of select="@*"/>
     <xsl:apply-templates/>
   </xsl:element>
</xsl:template>

</xsl:stylesheet>

T:\ftemp>xt justin.xml justin.xsl justin.out

T:\ftemp>type justin.out
<?xml version="1.0" encoding="utf-8"?>

     <justiceXML type="request" class="OTrackNameListRequest">
       <payload>
         <person>
           <personName>
             <firstName>MICHAEL</firstName>
             <lastName>MOLEN</lastName>
             <fullName>MICKEY MOLEN</fullName>
           </personName>
           <personDescription>
             <sex>Male</sex>
             <birthDate>1910-08-01</birthDate>
           </personDescription>
         </person>
       </payload>
     </justiceXML>

T:\ftemp>rem Done!


--
Upcoming hands-on in-depth 3-days XSLT/XPath and/or 2-days XSL-FO:
-                               North America:  Sep 30-Oct  4,2002
-                               Japan:          Oct  7-Oct 11,2002

G. Ken Holman                 mailto:gkholman@CraneSoftwrights.com
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/x/
Box 266, Kars, Ontario CANADA K0A-2E0  +1(613)489-0999 (Fax:-0995)
ISBN 0-13-065196-6                       Definitive XSLT and XPath
ISBN 1-894049-08-X   Practical Transformation Using XSLT and XPath
ISBN 1-894049-07-1                Practical Formatting Using XSLFO
XSL/XML/DSSSL/SGML/OmniMark services, books (electronic, printed),
articles, training (instructor-live,Internet-live,web/CD,licensed)
Next public training:           2002-08-05,26,27,09-30,10-03,07,10





 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS