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
--~------------------------------------------------------------------
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>
--~--