XSL-Übersicht / Schattenkabinett

Schattenkabinett

Schattenkabinett

➪ In XSLT 3.0 ist es möglich, mit einem statischen Wert während der Präprozessing-Phase zu arbeiten.

Ein Schattenattribut (shadow attribute) trägt denselben Namen wie ein anderes Attribut, jedoch mit einem "_" als Präfix.

Wie in beschrieben, können Sie andere XSL-Stylesheets in den aktuellen Transformationsaufruf einbinden. Die shadow attributes erlauben Ihnen beispielsweise, die Namen der einzubindenden Dateien automatisch zu bestimmen. Das ist sinnvoll bei mehrfacher Implementierung von Teillogiken (Templates, Funktionen, Variablen, Attribute-Sets), die unter demselben Namen, aber mit abweichender Logik, in diversen XSL-Dateien abgelegt sind. Über die automatische Namenszuweisung der externen XSL-Datei kommt die dort implementierte Logik zum Einsatz.


<xsl:param 
     name="vVersion" 
     static="yes" 
     select="2" 
     as="xs:integer"/>
<xsl:include _href="ausgelagert{$vVersion}.xsl"/>
<xsl:template match="/">
    <ergebnis>
    <xsl:call-template name="ausgeben">
        <xsl:with-param name="p">Parameter</xsl:with-param>
    </xsl:call-template>
    </ergebnis>
</xsl:template>

Das Prinzip können Sie auch auf die Generierung des XPath-Statements übertragen:


<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  version="3.0">
  <xsl:output method="xml" version="1.0" 
       encoding="UTF-8" indent="yes"/>
  <xsl:param name="pOrt" 
       static="yes" 
       as="xs:string" 
       select="&quot;Ort/name&quot;"/>
  <xsl:param name="pMensch" 
       static="yes" 
       as="xs:string" 
       select="'Mensch[Gehalt &gt; 1000]'"/>
  <xsl:template match="/*">
    <ROOT>
      <xsl:apply-templates 
           _select="/Orte/{$pOrt}, //{$pMensch}"/>
      <xsl:for-each 
           _select="//{$pMensch}">
        <m>
          <xsl:for-each 
               select="child::*[local-name() !='Kauf']">
            <xsl:attribute name="{local-name()}">
              <xsl:value-of select="text()"/>
            </xsl:attribute>
          </xsl:for-each>
        </m>
      </xsl:for-each>
    </ROOT>
  </xsl:template>
  <xsl:template _match="{$pOrt}">
    <Stadt>
      <xsl:value-of select="text()"/>
    </Stadt>
  </xsl:template>
  <xsl:template _match="{$pMensch}">
    <Person einkommen="{Gehalt}">
      <xsl:value-of select="vorname/text()"/>
    </Person>
  </xsl:template>
</xsl:stylesheet>

Ergebnis:


<ROOT>
 <Stadt>Neustadt</Stadt>
 <Stadt>Darmstadt</Stadt>
 <Stadt>Kapstadt</Stadt>
 <Person einkommen="1234.56">Nicole</Person>
 <Person einkommen="5430">Stefan</Person>
 <Person einkommen="6789">Willi</Person>
 <Person einkommen="3450">Betty</Person>
 <m id="4" name="Nixlos" vorname="Nicole" Gehalt="1234.56" idOrt="1"/>
 <m id="9" name="Sprachlos" vorname="Stefan" Gehalt="5430" idOrt="1"/>
 <m id="5" name="Wasistlos" vorname="Willi" Gehalt="6789" idOrt="3"/>
 <m id="6" name="Bodenlos" vorname="Betty" Gehalt="3450" idOrt="3"/>
</ROOT>

wg / 31. März 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/XSL30_Schattenkabinett.html