XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Achsen / namespace::*

namespace::*

namespace::*

➪ Sind Namespaces im Spiel, so erhalten Sie eine Liste aller Namepaces, die im betreffenden Node benannt worden sind, sodass sie für den aktuellen Node und dessen Childnodes gelten können. Das umfasst aber nicht jene Childnodes, deren Namespaces lokal definiert wurde.

Beispiel: Im Root-Element ns1:Orte sind mehrere Namespaces definiert, die in den Childnodes Verwendung finden können (was im Beispiel nicht der Fall ist, da es jene Childnodes gar nicht gibt). Der Childnode ns2:Ort hat dagegen seinen lokal definierten Namespace.


<ns1:Orte 
 xmlns="www.wilfried-grupe.de/Beispiele/2018" 
 xmlns:ns1="www.wilfried-grupe.de/Orte/2018"
 xmlns:ns3="www.wilfried-grupe.de/Mensch"
 xmlns:ns4="www.wilfried-grupe.de/Kauf" 
 xmlns:ns5="www.wilfried-grupe.de/Kauf">
 <ns2:Ort xmlns:ns2="www.wilfried-grupe.de/Ort">
  <id>1</id>
  <name>Neustadt</name>
 </ns2:Ort>
</ns1:Orte>

Mit /*/self::*/namespace::* (oder auch /*/namespace::*) erhalten Sie eine Liste jener Namespace-Nodes, die im Rootnode ns1:Orte definiert sind.


 <xsl:template match="/">
  <ergebnis>
   <xsl:for-each 
        select="/*/self::*/namespace::*">
    <e nr="{position()}">
     <xsl:attribute name="XPath">
       <xsl:call-template name="generateXPath"/>
     </xsl:attribute>     
     <xsl:value-of select="."/>
    </e>
   </xsl:for-each>
  </ergebnis>
 </xsl:template>

Die Liste sieht dann so aus:


<ergebnis>
  <e nr="1" XPath="/ns1:Orte">
   www.wilfried-grupe.de/Beispiele/2018
  </e>
  <e nr="2" XPath="/ns1:Orte">
   www.wilfried-grupe.de/Orte/2018
  </e>
  <e nr="3" XPath="/ns1:Orte">
   www.wilfried-grupe.de/Mensch
  </e>
  <e nr="4" XPath="/ns1:Orte">
   www.wilfried-grupe.de/Kauf
  </e>
  <e nr="5" XPath="/ns1:Orte">
   www.wilfried-grupe.de/Kauf
  </e>
  <e nr="6" XPath="/ns1:Orte">
   http://www.w3.org/XML/1998/namespace
  </e>
</ergebnis>

Nicht genannt würde dagegen jeder Namespace, der nicht in der Namespace-Liste des Root-Elements, sondern lokal in den Childnodes deklariert ist, hier also für ns2:Ort.


"www.wilfried-grupe.de/Ort"

Wenn Sie eine umfassende Liste verwendeter Namespaces benötigen, lohnt sich ein Blick auf den automatischen Namespace-Report.

wg / 30. April 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf.




parent::*



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/XPath_Achsen12.html