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


xsl:evaluate

xsl:evaluate bietet die Möglichkeit, die XPath-Statements zur Laufzeit zu generieren und auszuführen. Was ursprünglich nur unter XSLT 1.0 / XPath 1.0 prozessorabhängig möglich war, dann unter XSLT 2.0 und XPath 2.0 aus Sicherheitsbedenken wieder abgeschafft wurde, findet sich in XSLT 3.0 / XPath 3.0 nunmehr als Standard wieder.

<xsl:template name="evaluatedemo">
 <xsl:param name="myxpath" as="xs:string" />
 <xsl:variable name="mysequence">
  <xsl:evaluate 
   xpath="$myxpath" 
   as="xs:string+"
   context-item="." />
 </xsl:variable>
 <erg>
  <xsl:for-each select="$mysequence">
   <xsl:value-of select="." />
  </xsl:for-each>
 </erg>
</xsl:template>

Aufrufbar wird dieses "Meisterwerk" durch die automatische Generierung des XPath-Statements "/Orte/Ort[position() &lt; 3]/name" durch die concat-Funktion und dessen Parameter-Übergabe an das ausführende Template.

<xsl:call-template name="evaluatedemo">
 <xsl:with-param name="myxpath" 
  select="concat('/Orte/Ort', '[position() &lt; 3]','/name')"/>
</xsl:call-template>

Das Ergebnis des Aufrufes sehen wir hier:

<erg>Neustadt Darmstadt</erg>

Diese Konstruktion mag sinnvoll sein bei der Auslagerung der Logik in zahlreiche (Hunderte, Tausende!) Templates etc., die durch eine Haupt-Anwendung gestartet werden oder sich gegenseitig aufrufen. Meine Begeisterung hält sich in Grenzen, weil dieser Ansatz zwar die Flexibilität erhöht, ein kurzfristiges Maintenance jedoch erschwert. Um herauszufinden, welches XPath-Statement jeweils bei einem konkreten Template zum Einsatz kommt, kann ein sehr hoher Rechercheaufwand erforderlich sein.

Aus diesem Grunde sehe ich einen sinnvollen Einsatz von xsl:evaluate nur dann, wenn aufgrund schwach oder mäßig strukturierter XML-Dokumente (mixed content) eine erhöhte Flexibilität notwendig ist. Bei stark strukturierten oder gar scharf Schema-validierten Dokumenten sehe ich den Einsatz als weniger sinnvoll, um eine kurzfristige Wartbarkeit aufrecht zu erhalten.

qrpic/XSL303.jpg

wg / 14. 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