Well, if you only want to move the first namespace declaration with any
given prefix to the root, you could do something like this:
<xsl:copy-of select="@*"/>
<xsl:for-each-group select="//namespace::*" group-by="name()">
<xsl:copy-of select="current-group()[1]"/>
</xsl:for-each-group>
<xsl:copy-of select="child::node()"/>
Michael Kay
Saxonica
(Actually current-group()[1] could be written ".", but I think it's more
readable as written).
On 13/01/2013 19:29, Costello, Roger L. wrote:
Hi Folks,
I found this wonderful code [1] from Michael Kay to move the namespace
declarations up onto the root element:
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="@*, //namespace::*, child::node()"/>
</xsl:copy>
</xsl:template>
That works great, provided the XML document doesn't have the same namespace
prefix bound to different namespaces. For example, it fails on this XML
document:
<Test xmlns="A">
<ns1:element xmlns:ns1="B">Hello</ns1:element>
<ns1:element xmlns:ns1="C">C</ns1:element>
</Test>
Notice that the namespace prefix, ns1, is bound to two different namespaces.
Applying the XSLT program to the XML document results in this error:
Cannot create two namespace nodes with the same
prefix mapped to different URIs (prefix=ns1, URI=C,
URI=B)
How do I move the namespace declarations up onto the root element, while taking
in account that the XML document may contain a namespace prefix that is bound
to different namespaces?
/Roger
[1] http://www.mhonarc.org/archive/html/xsl-list/2009-10/msg00153.html
--~------------------------------------------------------------------
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>
--~--