Subject: Re: [xsl] How to output the unused namespaces in the XML document? From: Michael Kay <mike@xxxxxxxxxxxx> Date: Mon, 30 Aug 2010 22:28:41 +0100 |
<?xml version="1.0"?> <N1:NumberList> <Number>23</Number> <Number>41</Number> <Number xmlns:N3="http://www.example3.org">70</Number> <N3:Number xmlns:N3="http://www.example3.org">103</Number> <Number>99</Number> <Number>6</Number> </N1:NumberList>
Michael Kay Saxonica
Hi Folks,
Consider this XML document:
<?xml version="1.0"?> <N1:NumberList xmlns:N1="http://www.example1.org" xmlns:N2="http://www.example2.org"> <Number>23</Number> <Number>41</Number> <Number xmlns:N3="http://www.example3.org">70</Number> <Number>103</Number> <Number>99</Number> <Number>6</Number> </N1:NumberList>
Notice that there are three (3) namespaces, but two of them are unused:
http://www.example2.org
http://www.example3.org
I want an XSLT transform that will output all the unused namespaces in the input XML document.
Here's the solution I came up with:
<xsl:template match="*"> <xsl:variable name="elem" select="." /> <xsl:for-each select="namespace::*[. != 'http://www.w3.org/XML/1998/namespace']"> <xsl:variable name="ns" select="." /> <xsl:if test="not($elem/ancestor::*[namespace::* = $ns])"> <xsl:if test="not($elem/descendant-or-self::*[namespace-uri() = $ns])"> This namespace is unused:<xsl:value-of select="$ns" /> </xsl:if> </xsl:if> </xsl:for-each> <xsl:apply-templates select="*" /> </xsl:template>
Is there a better solution? (I am using XSLT 1.0)
/Roger
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to output the unused , Hermann Stamm-Wilbra | Thread | [xsl] mode computation case, ac |
Re: [xsl] How to output the unused , Evan Lenz | Date | [xsl] mode computation case, ac |
Month |