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

attribute::*

attribute::*

➪ Mit attribute::* erhalten Sie alle Attribute eines adressierten Nodes.

Nehmen Sie an, Ihr Input-Dokument hätte diesen Aufbau:


   <Orte>
      <Ort id="1" name="Neustadt"/>
      <Ort id="2" name="Darmstadt"/>
      <Ort id="3" name="Kapstadt"/>
   </Orte>

Dann ist es einfach, einen dieser Nodes zu adressieren und mit attribute::* sämtliche Attribute auszulesen.


 <ergebnis>
   <xsl:for-each 
        select="/Orte/Ort[1]/attribute::*">
     <a Attributname="{name()}" 
        wert="{.}"/>
   </xsl:for-each>
 </ergebnis>

<ergebnis>
  <a Attributname="id" wert="1"/>
  <a Attributname="name" wert="Neustadt"/>
</ergebnis>

Je nach verwendetem Prozessor können bei der Auswertung von Attributinhalten Fehler auftreten. Hilfe erhalten Sie mit der -Funktion.

Maximalwerte berechnen

Nehmen Sie an, Sie haben ein XML-Element mit mehreren Attributen, von denen Sie den Maximalwert berechnen möchten. Die Aufgabe wird nicht einfacher, wenn es sich hierbei um formatierte Datumswerte handelt.


<xsl:variable name="v1">
  <Item Datum1="02/15/2018" 
        Datum2="06/19/2018" 
        Datum3="05/26/2018" />
</xsl:variable>

Um die Lösung zu finden, können Sie "$v1" in eine Hilfsvariable "$v1a" konvertieren, die sämtliche Attribute übernimmt, dabei aber die formatierten Ausgangswerte in eine xs:integer-Zahl transformiert, die nach dem Muster "JAHR MONAT TAG" aufgebaut ist. Um die Einzelwerte zu übernehmen, bietet sich die -Funktion an.


<xsl:variable name="v1a">
 <ITEM>
  <xsl:for-each select="$v1/Item/attribute::*">
   <xsl:attribute name="{local-name()}">
    <xsl:variable name="vJahr">
     <xsl:value-of 
          select="tokenize(., '/')[3]"/>
    </xsl:variable>
    <xsl:variable name="vMonat">
     <xsl:value-of 
          select="tokenize(., '/')[1]"/>
    </xsl:variable>
    <xsl:variable name="vTag">
     <xsl:value-of 
          select="tokenize(., '/')[2]"/>
    </xsl:variable>
    <xsl:value-of 
         select="xs:integer(
                    concat($vJahr, $vMonat, $vTag)
                 )"/>
   </xsl:attribute>
  </xsl:for-each>
 </ITEM>
</xsl:variable>

Mit dieser Zwischenvariablen $v1a können Sie mit den min- und max-Funktionen sowie format-number arbeiten.


<ergebnis>
 <xsl:attribute name="minimal">
   <xsl:value-of 
        select="format-number(min($v1a/ITEM/attribute::*), '0')"/>
 </xsl:attribute>
 <xsl:attribute name="maximal">
  <xsl:value-of 
       select="format-number(max($v1a/ITEM/attribute::*), '0')"/>
 </xsl:attribute>
</ergebnis>

Im Ergebnis finden Sie die Minimal- und Maximalwerte als Attribute angezeigt.


<ergebnis 
     minimal="20180215" 
     maximal="20180619"/>

wg / 15. September 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.




child::*



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_Achsen14.html