XSL-Übersicht / xsl:namespace

xsl:namespace

xsl:namespace

xsl:namespace bietet ab XSLT 2.0 die Möglichkeit, Namespaces dynamisch zu generieren. Dabei übernimmt das Attribut "name", das zwingend vorhanden sein muss, den Namespace-Präfix.

Auf dieser Seite:

Um Namespaces dynamisch generieren zu können, genügt eine einfache Schleife sowie die Logik, wie das Namespace-Präfix sowie der Namespace erstellt werden soll.


 <xsl:template match="/">
  <Ergebnis>
   <xsl:for-each select="1 to 5">
    <xsl:namespace name="wg{.}">
     <xsl:text>www.namensraum</xsl:text>
     <xsl:value-of select="."/>
    </xsl:namespace>
   </xsl:for-each>
  </Ergebnis>
 </xsl:template>

Der Output hierfür ist vermutlich nachvollziehbar:


<Ergebnis 
    xmlns:wg1="www.namensraum1"
    xmlns:wg2="www.namensraum2"
    xmlns:wg3="www.namensraum3"
    xmlns:wg4="www.namensraum4"
    xmlns:wg5="www.namensraum5"/>

Mit demselben Verfahren können Sie auch Elemente und Attribute generieren und diese den definierten Namensraumknoten via Präfix zuweisen.


 <xsl:template match="/">
  <Ergebnis>
   <xsl:for-each select="1 to 5">
    <xsl:namespace name="wg{.}">
     <xsl:text>www.namensraum</xsl:text>
     <xsl:value-of select="."/>
    </xsl:namespace>
   </xsl:for-each>
   <xsl:for-each select="1 to 5">
    <xsl:element 
         namespace="www.namensraum{.}" 
         name="wg{.}:ee" >
     <xsl:value-of select="."/>
    </xsl:element>
   </xsl:for-each>
   <xsl:element name="elementMitAttributen">
    <xsl:for-each select="1 to 5">
     <xsl:attribute 
          name="wg{.}:aa" 
          select="." 
          namespace="www.namensraum{.}">
     </xsl:attribute>
    </xsl:for-each>
   </xsl:element>
  </Ergebnis>
 </xsl:template>

Das erweiterte Resultat hat damit diesen Aufbau:


<Ergebnis 
    xmlns:wg1="www.namensraum1"
    xmlns:wg2="www.namensraum2"
    xmlns:wg3="www.namensraum3"
    xmlns:wg4="www.namensraum4"
    xmlns:wg5="www.namensraum5">
   <wg1:ee>1</wg1:ee>
   <wg2:ee>2</wg2:ee>
   <wg3:ee>3</wg3:ee>
   <wg4:ee>4</wg4:ee>
   <wg5:ee>5</wg5:ee>
   <elementMitAttributen 
       wg1:aa="1" 
       wg2:aa="2" 
       wg3:aa="3" 
       wg4:aa="4" 
       wg5:aa="5"/>
</Ergebnis>

xsl:namespace-alias

Etwas anders gelagert ist die Angelegenheit bei dem Top-Level-Element xsl:namespace-alias, das Namespaces im Output ersetzen kann.


<xsl:stylesheet 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 xmlns:ns1="www.namespace/ns1" 
 xmlns:ns2="www.namespace/ns2"
 exclude-result-prefixes="ns2 ns1"
 version="3.0">
 <xsl:namespace-alias 
      stylesheet-prefix="ns1" 
      result-prefix="ns2"/>
 <xsl:template match="/">
  <ns1:Ergebnis/>  
 </xsl:template>
</xsl:stylesheet>

Obwohl im xsl:template das Element ns1:Ergebnis mit dem Namespace-Präfix ns1 benannt wurde und obwohl beide Namespaces ns1 und ns2 in exclude-result-prefixes benannt sind, wird die Ausgabe durch den xsl:namespace-alias auf ns2 gesetzt.


<ns2:Ergebnis xmlns:ns2="www.namespace/ns2"/>

wg / 5. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/xsl_namespace.html