Wiki-Quellcode von XSL-Transformation
Zeige letzte Bearbeiter
| author | version | line-number | content |
|---|---|---|---|
| 1 | Templates vom Typ //XSL-Transformation// dienen der Transformation einer //XML//-Exportdatei und können z.B. in Aktionen vom Typ [[Export (XML-Datei)>>doc:Formcycle.Designer.Workflow.Actions.ExportXML]] oder für den [[Export eines Vorgangs in einem Postfach>>doc:Formcycle.Inbox.WebHome]] verwendet werden. | ||
| 2 | |||
| 3 | == Unterstützte Versionen des XSLT- und XPath-Standards == | ||
| 4 | |||
| 5 | Bis einschließlich {{formcycle/}} Version 7.2.1 werden nur //XSL-Transformationen// im Sprachstandard XSLT 1.0 und XPath 1.0 unterstützt. | ||
| 6 | |||
| 7 | {{version major="7" minor="3" patch="0"/}}Ab {{formcycle/}} Version 7.3 wird ein anderer Prozessor verwendet, welcher XSLT 3.0 und XPath 3.1 unterstützt. | ||
| 8 | |||
| 9 | == Unterschiede bei der Verwendung von XSL-Transformationen ab {{formcycle/}} Version 7.3 == | ||
| 10 | |||
| 11 | Grundsätzlich unterstützt der in neueren {{formcycle/}} Versionen verwendete XSLT-Prozessor alle Sprachfeatures, die auch der ältere Prozessor unterstützt hat, da er rückwärtskompatibel zu XSLT 1.0 ist. Der in älteren {{formcycle/}} Versionen verwendete XSLT-Prozessor erlaubte aber an manchen Stellen mehr, als der Sprachstandard zwingend vorschreibt. Dies kann dazu führen, dass bestehende XSL-Transformationen nach einem Update auf eine {{formcycle/}} Version größer gleich 7.3 nicht mehr funktionieren. | ||
| 12 | |||
| 13 | Bisher sind folgende Probleme bekannt: | ||
| 14 | |||
| 15 | === Verschachtelte Funktionsaufrufe === | ||
| 16 | |||
| 17 | Funktionsaufrufe in der Form | ||
| 18 | |||
| 19 | {{code language="xml"}} | ||
| 20 | <xsl:variable name="dd"> | ||
| 21 | <xsl:value-of select="format-number(substring-before($datestr,'.'), '0' )" /> | ||
| 22 | </xsl:variable> | ||
| 23 | {{/code}} | ||
| 24 | |||
| 25 | sind nicht mehr möglich. Stattdessen kann man das Ergebnis der inneren Funktion zum Beispiel in Variablen zwischenspeichern: | ||
| 26 | |||
| 27 | {{code language="xml"}} | ||
| 28 | <xsl:variable name="ddtemp"> | ||
| 29 | <xsl:value-of select="substring-before($datestr,'.')" /> | ||
| 30 | </xsl:variable> | ||
| 31 | |||
| 32 | <xsl:variable name="dd"> | ||
| 33 | <xsl:value-of select="format-number($ddtemp, '0' )" /> | ||
| 34 | </xsl:variable> | ||
| 35 | {{/code}} | ||
| 36 | |||
| 37 | === Leerzeichen === | ||
| 38 | |||
| 39 | Insbesondere bei der Auflösung von Schleifenvariablen müssen in bestimmten Konstellationen Leerzeichen zwingend verwendet werden, wo dies zuvor nicht nötig war. Dies ist zum Beispiel an folgender Stelle so: | ||
| 40 | |||
| 41 | {{code language="xml"}} | ||
| 42 | <xsl:if test="position()=1 and .!=''"> | ||
| 43 | {{/code}} | ||
| 44 | |||
| 45 | Hier müssen Leerzeichen wie folgt vorhanden sein: | ||
| 46 | |||
| 47 | {{code language="xml"}} | ||
| 48 | <xsl:if test="position() = 1 and . != ''"> | ||
| 49 | {{/code}} | ||
| 50 | |||
| 51 | === Funktionen in For-Each-Schleifen === | ||
| 52 | |||
| 53 | Der Vergleich der //position()// Variable z.B. innerhalb eines xsl:if-Blocks konnte zuvor gegen einen String mit dem Positionswert erfolgen. | ||
| 54 | |||
| 55 | {{code language="xml"}} | ||
| 56 | <xsl:if test="position()='1'"> | ||
| 57 | {{/code}} | ||
| 58 | |||
| 59 | Dies entsprach nie dem Standard, und ist nicht mehr möglich. Stattdessen muss der Vergleich mit dem reinen Zahlenwert erfolgen: | ||
| 60 | |||
| 61 | {{code language="xml"}} | ||
| 62 | <xsl:if test="position() = 1"> | ||
| 63 | {{/code}} |