[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Removing unwanted namespaces
I tried to run your code in separate xsl, its copying entire request including the content inside the SOAPHeader . I tried other option too including these templates in my code that was posted earlier, but still i can see the namespaces for those which i removed from header. So still i got the same original result. --- On Thu, 12/1/12, Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote: > From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> > Subject: Re: Removing unwanted namespaces > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Date: Thursday, 12 January, 2012, 1:32 AM > Ram, > > My code can be rewritten in XSLT 1.0: > > <xsl:template match="*"> > <xsl:element name="{name(.)}" > namespace="{namespace-uri(.)}"> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > <xsl:template match="/*"> > <xsl:element name="{name(.)}" > namespace="{namespace-uri(.)}"> > <xsl:copy-of > select="//namespace::*[.=namespace-uri(..)]"/> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > (The redundant copying of namespace nodes here could be an > expensive > operation, and won't work properly if you have clashes > among your > prefixes. You could avoid this with Muenchian grouping but > I'm not sure > it would be worth it.) > > Plus, I hope that namespace-savvy readers are checking my > work since > this is a vexing area and I am not at all certain my advice > is uniformly > good. :-P > > Cheers, > Wendell > > On 1/11/2012 2:36 PM, ram wrote: > > Thanks for the reply Wendell and Matthieu. I have to > use xslt 1.0, unfortunatly i cant use them > > > > > > --- On Wed, 11/1/12, Wendell Piez<wapiez@xxxxxxxxxxxxxxxx> > wrote: > > > >> From: Wendell Piez<wapiez@xxxxxxxxxxxxxxxx> > >> Subject: Re: Removing unwanted namespaces > >> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >> Date: Wednesday, 11 January, 2012, 11:05 PM > >> Ram, > >> > >> It will look something like this (XSLT 2.0): > >> > >> <xsl:template match="*"> > >> <xsl:copy > copy-namespaces="no"> > >> <xsl:copy-of > select="@*"/> > >> <xsl:apply-templates/> > >> </xsl:copy> > >> </xsl:template> > >> > >> <xsl:template match="soapenv:Header/*"/> > >> > >> However, note that while this meets your > requirement as > >> stated, it does not provide declarations at the > top for all > >> namespaces in use, which you probably want. This > is somewhat > >> trickier. > >> > >> Assuming your input maps namespaces to prefixes > one-to-one, > >> you could address that problem like this: > >> > >> <xsl:template match="/*"> > >> <xsl:copy > copy-namespaces="no"> > >> <xsl:copy-of > select="@*"/> > >> <xsl:for-each-group > select="//*" > >> group-by="namespace-uri(.)"> > >> <xsl:namespace > >> name="{prefix-from-QName(node-name(.))}"> > >> > <xsl:value-of > >> select="current-grouping-key()"/> > >> </xsl:namespace> > >> </xsl:for-each-group> > >> <xsl:apply-templates/> > >> </xsl:copy> > >> </xsl:template> > >> > >> You might want to check this paper out (or at any > rate, the > >> stylesheets bundled with it, which offer more > comprehensive > >> solutions to namespace problems): > >> > >> http://www.ncbi.nlm.nih.gov/books/NBK62086/ > >> > >> I hope this helps, > >> Wendell > >> > >> On 1/11/2012 10:55 AM, ram wrote: > >>> Hi, > >>> I have a soap > request which > >> contains header and body information. I want to > remove the > >> content inside the header and the namespaces for > those which > >> are inside the header . > >>> Here is my example > >>> > >>> <?xml version="1.0" encoding="UTF-8"?> > >>> <soapenv:Envelope xmlns:con="http://abcd.com/abc/context" xmlns:dat="http://test.com/test/testContracts" xmlns:head="http://abcd.com/abc/header" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > >>> <soapenv:Header> > >>> > >> <head:abcdHeader> > >>> > >> <head:Props> > >>> > >> > >>> > >> </head:Props> > >>> > >> <head:Routing> > >>> > >> > >>> > >> </head:Routing> > >>> > >> </head:abcdHeader> > >>> > >> <con:Context> > >>> > >> <con:CtxProps> > >>> > >> context info > >>> > >> </con:CtxProps> > >>> > >> </con:Context> > >>> </soapenv:Header> > >>> <soapenv:Body> > >>> Body > content > >>> </soapenv:Body> > >>> </soapenv:Envelope> > >>> > >>> > >>> The output i am expecting is like below > >>> <?xml version="1.0" encoding="UTF-8"?> > >>> <soapenv:Envelope xmlns:dat="http://test.com/test/testContracts" > >> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > >>> <soapenv:Header> > >>> > >>> </soapenv:Header> > >>> <soapenv:Body> > >>> Body > content > >>> </soapenv:Body> > >>> </soapenv:Envelope> > >>> > >>> > >>> I tried the > following xslt > >> code which removes the Header Info, but it still > keeping the > >> namespaces which references the ones inside the > >> header. > >>> > >>> > >>> <xsl:template > >> match="@*|node()"> > >>> > >> <xsl:copy> > >>> > >> <xsl:apply-templates > >> select="@*|node()"/> > >>> > >> </xsl:copy> > >>> </xsl:template> > >>> <xsl:template > >> match="//*[local-name()='abcdHeader'] "> > >>> > >>> > >> </xsl:template> > >>> <xsl:template > >> match="//*[local-name()='Context'] "/> > >> > >>> > >>> > >>> The output that i am getting > >>> > >>> <?xml version="1.0" encoding="UTF-8"?> > >>> <soapenv:Envelope xmlns:dat="http://test.com/test/testContracts" > >>> xmlns:head="http://abcd.com/abc/header" > >>> xmlns:con="http://abcd.com/abc/context" > >>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > >>> <soapenv:Header> > >>> > >>> </soapenv:Header> > >>> <soapenv:Body> > >>> Body > content > >>> </soapenv:Body> > >>> </soapenv:Envelope> > >>> > >>> i dont want to > header and > >> context namesspaces in the output. How to fix this > issue. > >>> > >>> --kk > >>> > >>> > >> > >> -- > >> > ====================================================================== > >> Wendell Piez > >> > >> mailto:wapiez@xxxxxxxxxxxxxxxx > >> Mulberry Technologies, Inc. > >> http://www.mulberrytech.com > >> 17 West Jefferson Street > >> Direct > Phone: > >> 301/315-9635 > >> Suite 207 > >> > >> > Phone: > >> 301/315-9631 > >> Rockville, MD 20850 > >> > >> Fax: > 301/315-8285 > >> > ---------------------------------------------------------------------- > >> Mulberry Technologies: A Consultancy > Specializing in > >> SGML and XML > >> > ====================================================================== > > > > > > -- > ====================================================================== > Wendell Piez > > mailto:wapiez@xxxxxxxxxxxxxxxx > Mulberry Technologies, Inc. > http://www.mulberrytech.com > 17 West Jefferson Street > Direct Phone: > 301/315-9635 > Suite 207 > > Phone: > 301/315-9631 > Rockville, MD 20850 > > Fax: 301/315-8285 > ---------------------------------------------------------------------- > Mulberry Technologies: A Consultancy > Specializing in SGML and XML > ======================================================================
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|