You need to create elements and attributes with the correct expanded name at
the time you create them. If that means using xsl:element, so be it.
xsl:namespace can only be used to create additional namespace nodes to those
that are created automatically for the prefixes/uris used in element and
attribute names; it can't be used to modify the name of an element or
attribute node.
As always, to understand this you need to understand the data model for
namespaces. An element/attribute name is a triple, containing (prefix, uri,
localname). A namespace node is a pair (prefix, uri). There is a consistency
rule that if an element or attribute name exists containing prefix=P uri=U
then there must be a namespace node (P, U). The namespace fixup process
ensures that this namespace node is created automatically when you create an
element or attribute. xsl:namespace is there to allow you to create
additional namespace nodes, typically for namespaces used in QName-valued
content.
Regards,
Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay
-----Original Message-----
From: Dimitre Novatchev [mailto:dnovatchev(_at_)gmail(_dot_)com]
Sent: 12 March 2010 23:45
To: David Carlisle
Cc: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Is it possible to set the default
namespace with a dynamically-generated namespace uri?
<xsl:element name="foo" namespace="$x"
is your friend
david
Yes, but this would require creating all the output with <xsl:element>
The OP (in another forum) wants this default namespace to
apply to literal result elements that are descendents of this
top node.
However, they are just copied to the output 1:1 and the
serializer takes special care to express the fact that they
belong to no
namespace, by inserting " xmlns='' " on all of them.
It seems to me that using <xsl:namespace> it is not possible
to specify a default namespace.
I would be very glad if someone provides a concrete code
sample proving me wrong :)
Cheers,
Dimitre
On Fri, Mar 12, 2010 at 11:26 AM, David Carlisle
<davidc(_at_)nag(_dot_)co(_dot_)uk> wrote:
On 12/03/2010 19:15, Dimitre Novatchev wrote:
http://www.w3.org/TR/xslt20/#element-namespace
If the effective value of the name attribute is a zero-length
string, a namespace node is added for the default namespace.
so
<foo>
<xsl:namespace name="" select="$x"/>
sets the default namespace to the uri in the variable x.
David
David, I tried this hours before asking the question.
Saxon raises this error:
er because I got it wrong, sorry, I should have checked or known or
something.
You can add namespace nodes using xsl:namespace but you
can't change
the namespace of a node that's already been created so <foo>
<xsl;namespace name=""
doesn't work.
<xsl:element name="foo" namespace="$x"
is your friend
david
--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant
intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know
whether what you're doing is work or play
-------------------------------------
I enjoy the massacre of ads. This sentence will slaughter ads
without a messy bloodbath.
--~------------------------------------------------------------------
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>
--~--