Subject: Re: [xsl] How to output the unused namespaces in the XML document? From: Evan Lenz <evan@xxxxxxxxxxxx> Date: Mon, 30 Aug 2010 14:18:55 -0700 |
-- Evan Lenz Lenz Consulting Group, Inc. http://lenzconsulting.com +1 (360) 297-0087
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 -> |
---|---|---|
[xsl] How to output the unused name, Costello, Roger L. | Thread | Re: [xsl] How to output the unused , Hermann Stamm-Wilbra |
[xsl] How to output the unused name, Costello, Roger L. | Date | Re: [xsl] How to output the unused , Michael Kay |
Month |