Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


XPath: data

Zusammenfassung:

Die data() Funktion liefert die atomisierten Werte einer Sequenz: jeder Node wird also durch seinen Wert ersetzt.

XPath: data

Das folgende Beispiel generiert eine Sequenz aus mehreren Elementen ("//name" kommt aus dem XML Input, $v/E/attribute::* ist eine Attributliste). Während bei der Auswertung von "//name" im Grunde "//name/text()" ausgegeben wird, das in <xsl:value-of select="./text()" /> auch gezielt aufgerufen werden kann, würde dieser ./text()-Aufruf bei den Attributen einen leeren Output ergeben.

 <xsl:attribute-set name="aset1">
  <xsl:attribute name="a1">a1</xsl:attribute>
  <xsl:attribute name="a2">a2</xsl:attribute>
 </xsl:attribute-set>
 <xsl:template name="data_function">
  <Namensliste>
   <xsl:variable name="v">
    <E xsl:use-attribute-sets="aset1" />
   </xsl:variable>
   <xsl:for-each select="(//name, $v/E/attribute::*)">
    <wert>
     <xsl:value-of select="./text()" />
    </wert>
   </xsl:for-each>
  </Namensliste>
 </xsl:template>

Die Ausgabe ergäbe folgendes Resultat:

   <Namensliste>
     <!-- ... -->
     <wert>Muehelos</wert>
     <wert>Leinenlos</wert>
     <wert/>
     <wert/>
   </Namensliste>

data() atomisiert nun diese Sequenz, so daß unterschiedslos mit den Einzelwerten gearbeitet werden kann. Freilich würde eine Auswertung dieser atomisierten Sequenz mit <xsl:value-of select="./text()" /> eine Fehlermeldung verursachen: "Fatal Error! Required item type of first operand of '/' is node(); supplied value has item type xs:anyAtomicType".

 <xsl:template name="data_function">
  <Namensliste>
   <xsl:variable name="v">
    <E xsl:use-attribute-sets="aset1" />
   </xsl:variable>
   <xsl:for-each select="data((//name, $v/E/attribute::*))">
    <wert>
     <xsl:value-of select="." />
    </wert>
   </xsl:for-each>
  </Namensliste>
 </xsl:template>

Das Resultat ist nun wie gewünscht:

   <Namensliste>
      <!-- ... -->
      <wert>Muehelos</wert>
      <wert>Leinenlos</wert>
      <wert>a1</wert>
      <wert>a2</wert>
   </Namensliste>

qrpic/data.jpg

wg / 4. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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