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


XSL - Variable

XSL - Variable

Im Unterschied zu Variablen in C, C++, C#.NET, Java, VB.NET und zahlreichen anderen Programmiersprachen, in denen ein x = x + 1 eine sinnvolle Anweisung ist, übernimmt eine Variable in XSL nur einen temporären Wert, der in der Regel zur Laufzeit gesetzt und an passender anderer Stelle wieder ausgelesen wird. Dieser temporäre Wert kann ein simpler Datentyp sein, aber ebenso auch ein komplexer Baum.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="xs">
  <xsl:output method="xml" indent="yes" />
  <xsl:variable name="vinput"
    select="document('Orte_Elemente.xml')" />
  <!-- $var1 beinhaltet einen normalen Text -->
  <xsl:variable name="var1"
    select="$vinput/Orte/Ort[1]/Mensch[2]/Kauf[3]/bez/text()" />
  <!-- $var2 beinhaltet ein einziges Element, 
  das seinerseits mehrere Childnodes in sich birgt.
  Umd diese anzusteuern, ist in XPath $var2/Kauf/child::* erforderlich.
  Die Einzelinformation erhalten Sie über $var2/Kauf/bez -->
  <xsl:variable name="var2">
    <xsl:copy-of select="$vinput/Orte/Ort[1]/Mensch[2]/Kauf[3]" />
  </xsl:variable>
  <!-- $var3 beinhaltet mehrere Childnodes: hier werden der Variable 
  mehrere Childnodes direkt zugewiesen, ohne das kapselnde Element Kauf.
  angesteuert werden können diese im Loop über $var3/child::*.
  Die Einzelinformation erhalten Sie über $var3/bez
   -->
  <xsl:variable name="var3">
    <xsl:for-each 
    select="$vinput/Orte/Ort[1]/Mensch[2]/Kauf[3]/child::*">
      <xsl:copy-of select="." />
    </xsl:for-each>
  </xsl:variable>
  <!-- NodeInfo untersucht den aktuellen Node aus verschiedener Sicht -->
  <xsl:template name="NodeInfo">
    <xsl:attribute name="Elementname" select="./local-name()" />
    <xsl:attribute name="wert" select="." />
    <xsl:attribute name="Nodetype">
    <xsl:choose>
      <xsl:when test="./self::text()">Textnode</xsl:when>
      <xsl:when test="./self::element()">Elementnode</xsl:when>
      <xsl:when test="./self::comment()">Kommentarknoten</xsl:when>
    </xsl:choose>
    </xsl:attribute>
    <xsl:attribute name="XSDtype">
      <xsl:choose>
      <xsl:when test=". castable as xs:integer">xs:integer</xsl:when>
      <xsl:when test=". castable as xs:decimal">xs:decimal</xsl:when>
      <xsl:when test=". castable as xs:string">xs:string</xsl:when>
      </xsl:choose>
    </xsl:attribute>
  </xsl:template>
  <xsl:template match="/">
    <ergebnis>
      <var1>
        <xsl:for-each select="$var1/self::text()">
          <xsl:call-template name="NodeInfo" />
        </xsl:for-each>
      </var1>
      <var2>
        <xsl:for-each select="$var2/Kauf/child::*">
          <childelement>
            <xsl:call-template name="NodeInfo" />
          </childelement>
        </xsl:for-each>
      </var2>
      <var2bez>
        <xsl:value-of select="$var2/Kauf/bez"/>
      </var2bez>
      <var3>
        <xsl:for-each select="$var3/child::*">
          <childelement>
            <xsl:call-template name="NodeInfo" />
          </childelement>
        </xsl:for-each>
      </var3>
      <var3bez>
        <xsl:value-of select="$var3/bez"/>
      </var3bez>
    </ergebnis>
  </xsl:template>
</xsl:stylesheet>

qrpic/xsl_variablen.jpg

wg / 31. August 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