|
Subject: RE: [xsl] Adding *xmlns* attribute dynamically From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 12 Jan 2007 11:38:57 -0000 |
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@xxxxxxxxx]
> Sent: 12 January 2007 10:40
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> 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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Adding *xmlns* attribute dyna, Kishore Bankupelle | Thread | Re: [xsl] Adding *xmlns* attribute , Florent Georges |
| [xsl] Adding *xmlns* attribute dyna, Kishore Bankupelle | Date | Re: [xsl] Adding *xmlns* attribute , Florent Georges |
| Month |