The general rule here is: create your elements and attributes in the right
namespace, and the namespace declarations will look after themselves. For
example if your stylesheet says:
<xsl:element name="{$x}" namespace="{$uri}">
where $x is an unprefixed name, then the system will output a declaration of
the default namespace without any special action on your part.
There are a couple of cases where this might not be good enough:
(a) for cosmetic reasons, you might want the namespace declaration to appear
on the xs:schema element, rather than on the elements where it is actually
needed
(b) you might want to declare a namespace prefix that isn't actually used in
any element and attribute names, for example a prefix that is only used in
QName-valued attribute content.
For these situations XSLT 2.0 has an xsl:namespace instruction, which works
like xsl:attribute except that it generates a namespace node rather than an
attribute node. The namespace node will convert into a namespace declaration
when the document is serialized.
There's no direct equivalent in XSLT 1.0 but there's a well-known workaround
involving xsl:copy: to create a namespace node that binds prefix $p to uri
$u, do:
<xsl:variable name="dummy">
<xsl:element name="{$p}dummy" namespace="{$u}"/>
</xsl:variable>
<xsl:copy-of select="xx:node-set($dummy)//namespace::*"/>
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Kishore Bankupelle [mailto:brkkis(_at_)gmail(_dot_)com]
Sent: 12 January 2007 10:40
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Adding *xmlns* attribute dynamically
Hi,
I am new to XSL and writing a XSL to transform list of XSDs
to another list of XSD.
The issue is, i want to assign a dynamic value for "xmlns"
attribute in <xs:schema>. From the mailing archieves i see
that i cannot add "xmlns" as an attribute. If i try below
*<xs:schema>
<xsl:attribute name="xmlns">
<xsl:value-of select="$ReqResName" />
</xsl:attribute>
</xs:schema>
*
where "ReqResName" is a variable(<xsl:variable>), i am
getting the below error.
*Illegal value used for attribute name: name*
I believe this is because of adding "xmlns" as an attribute.
If you add the attribute "xmlns" directly to the tag, you
cant change the attribute value dynamically. So,
*<xs:schema version="1.0" xmlns="????????">some child
elemnsts</xs:schema>*
The above example does not give you a way to change the value
represented by "??????" dynamically. I mean to say we cant
access any XSL variable in the place of "????????".
So if i want to change the value of "xmlns" attribute in
"<xs:schema>", what is the solution?
Thanks in advance.
Regards,
Kishore
--~------------------------------------------------------------------
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>
--~--