Previous | Next | Indexes
Zvon > Tutorials > XSLT 2.0 Tutorial > Namespaces (8/11) >

Removal of unwanted namespace declarations

Attribute exclude-result-prefixes can be used on any element to prevent output of unwanted namespace declarations. Values of this attribute may be either space separated list of unwanted namespaces to be excluded or "#all" which removes all namespaces which are not needed.

Please note that if two prefixes are used for the same namespace, specification of one prefix in exclude-result-prefixes automatically removes others (in XML prefixes are not important, namespaces are).

While namespace handling may seem perplexing, in real life scenario it is usually sufficient to set exclude-result-prefixes on xsl:stylesheet element as authors of the stylesheets usually prefer to have unneeded namespace declarations removed everywhere.

XSLT

      <xsl:stylesheet
                  xmlns:o="oooooo"
                  xmlns:r="rrrrrr"
                  xmlns:r1="rrrrrr"
                  xmlns:s="ssssss"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  version="2.0">
            <xsl:output  method="xml"
                        indent="yes"
                        omit-xml-declaration="yes"/>

            <xsl:template  match="/aaa">
                  <xxx>
                        <ddd/>
                        <o:eee/>
                  </xxx>
                  <yyy  xsl:exclude-result-prefixes="r s">
                        <ddd/>
                        <o:eee/>
                  </yyy>
                  <zzz  xsl:exclude-result-prefixes="#all">
                        <ddd/>
                        <o:eee/>
                  </zzz>
            </xsl:template>

      </xsl:stylesheet>
XML

      <aaa
                  xmlns:o="oooooo"
                  xmlns:p="pppppp"
                  xmlns:v="vvvvvv">
            <o:bbb/>
      </aaa>
Output

      <xxx
                  xmlns:o="oooooo"
                  xmlns:r="rrrrrr"
                  xmlns:r1="rrrrrr"
                  xmlns:s="ssssss">
            <ddd/>
            <o:eee/>
      </xxx>
      <yyy
                  xmlns:o="oooooo">
            <ddd/>
            <o:eee/>
      </yyy>
      <zzz>
            <ddd/>
            <o:eee
                        xmlns:o="oooooo"/>
      </zzz>


Previous chapter: Multiple Outputs
Next chapter: Keys
Previous page: Namespace propagation from source to result
Next page: Namespace aliasing