xsl-list
[Top] [All Lists]

Re: [xsl] adding element in with general namespace prefix

2012-02-08 16:01:52
Ram,

Maybe you want to use xsl:copy, which may do better for you. Most processors, when copying an element, will use the same prefix as the input document uses.

Or it may not: as Ken says, processors are not obliged to respect prefixes since a prefix is not properly part of the name, as formally defined; it is only a (local) binding mechanism.

If you are answering a requirement from a partner who does not understand this, you can, in XSLT 2.0, go to considerably more work to construct elements with namespaces, names and their prefixes generated dynamically, using XPath functions such as name(), prefix-from-QName(), and namespace-uri-for-prefix(). An XSLT stylesheet could generate a new header using whatever prefix the input uses, whatever it is -- although such a stylesheet will look pretty mysterious to the uninitiated.

But this is not trivial to do, and a lot of trouble to go to for something that matters only because someone thinks it matters. Even worse, if you are addressing a set of requirements that have never been articulated, which you have only because someone at some point might be unhappy about something ... well. That's a difficult problem to solve.

Cheers,
Wendell

On 2/8/2012 4:46 PM, ram wrote:
i completly agree with you, but some time service provider may not like it when 
he sees the request, he may question, why are you keeping different namespace 
prefix for same namespace.
    i wanted to be consistent in the entire soap request that i am sending

--- On Thu, 9/2/12, G. Ken Holman<gkholman(_at_)CraneSoftwrights(_dot_)com>  
wrote:

From: G. Ken Holman<gkholman(_at_)CraneSoftwrights(_dot_)com>
Subject: Re: [xsl] adding element in with general namespace prefix
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com, 
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Thursday, 9 February, 2012, 3:11 AM
A true XML application ignores the
namespace prefix and relies only
on the namespace URI associated with the namespace prefix.

Can you explain why it is important to you that the prefix
be the
same?  It is irrelevant.  This request is
equivalent to an XML-based
namespace-aware application:

    <giraffe:Envelope xmlns:giraffe="http://schemas.xmlsoap.org/soap/envelope/";>

An XML application will still see the above as a SOAP
envelope.

At 2012-02-09 03:06 +0530, ram wrote:
        So any idea how to fix
it.

It isn't broken.

I hope this helps.

. . . . . . . . . . Ken

At 2012-02-09 03:06 +0530, ram wrote:
Hi,
     I have a soap request like the following
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:con1="http://abc.com/DefService/";>

    <soapenv:Header>


</soapenv:Header>

    <soapenv:Body>

    <con1:GetDefinition>


    <!--Optional:-->


    <con1:Request><con1:Id/>


    </con1:Request>

    </con1:GetDefinition>

    </soapenv:Body>
</soapenv:Envelope>

I wanted to add ws:security with username credentials to
the request
like the following.



<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:con="http://wellpoint.com/esb/context";
xmlns:con1="http://abc.com/DefService/>
<soapenv:Header>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";>
   <wsse:UsernameToken>

<wsse:Username>abcd</wsse:Username>

<wsse:Password>ramkurra</wsse:Password>
   </wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
     <con1:GetDefinition>
          <con1:Id/>

    </con1:Response>
     </con1:GetDefinition>
</soapenv:Body>
</soapenv:Envelope>


i tried with the following piece of code

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="@*|node()">
      <xsl:copy>

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

</xsl:template>
<xsl:template
match="/*[local-name()='Envelope']/*[local-name()='Header']">
<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";>
<wsse:UsernameToken>
     <wsse:Username>
abc</wsse:Username>
     <wsse:Password>
xya</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
</xsl:template>
</xsl:stylesheet>

      i get the result as expected,
but my problem is when client
sends the request with different namespace name rather
than
soapenv:Header, like s:Header, the following line of
code will
still put soapenv:Header in the result
<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>

     I wanted to make this namespace prefix is
more of generalized
manner, which picks from request.
        So any idea how to fix
it.


--
Contact us for world-wide XML consulting and instructor-led
training
Free 5-hour video lecture: XSLT/XPath 1.0&  2.0 http://ude.my/uoui9h
Crane Softwrights Ltd.
   http://www.CraneSoftwrights.com/s/
G. Ken Holman
        mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--
======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
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
======================================================================

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--