Thread XSLT: Kann man im Template Elemente typisieren (6 answers)
Opened by barney at 2024-11-16 13:56

barney
 2024-11-16 13:56
#196717 #196717
User since
2008-08-31
165 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich habe mich nach langer Zeit wieder mal mit XSLT beschäftigt. In OTOBO kann man Webservices definieren die eine Datenstruktur transformieren. Eine Option ist dabei die Transformation mittels XSLT. Dabei hat man die Situation dass das eingehende XML keine Schema-Deklaration hat.
Siehe auch XSLT Tests in OTOBO

Mein Erkenntnisstand ist das ohne Schema-Deklaration alle Werte als String angesehen werden. Es wäre aber kommod wenn man im Template den Typ von Werten deklarieren könnte. Dann könnte man die Strings false und true als boolsch ansehen.

Meine Fragen ist also ob man im Template die Typdeklarationen irgendwie nachschieben kann. Ich habe https://www.data2type.de/xml-xslt-xslfo/xslt/xslt-... gefunden. Soweit ich es überblicke kann man hier Typen verfügbar machen. Aber ich blicke nicht ob man da auch Typen an Elementen zuweisen kann.

Hier noch ein Beispiel welches die Fragestellung verdeutlichen soll. Ziel wäre es das auch bei BoolEvaluation erkannt wird dass "Am Ende war die Tat" kein Kamel auf dem Buchdeckel hat.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
~/devel/Perl/XML$ cat books.xml 
<library>
<books>
<book>
<name>Programming Perl</name>
<has_camel_on_cover>true</has_camel_on_cover>
</book>
<book>
<name>Am Ende war die Tat</name>
<has_camel_on_cover>false</has_camel_on_cover>
</book>
</books>
</library>


~/devel/Perl/XML$ cat books.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="//books">
<NewRootElement>
<xsl:for-each select="book">
<StringMatching>
<xsl:choose>
<xsl:when test="has_camel_on_cover = 'true'">
<xsl:text>🐪:</xsl:text>
</xsl:when>
<xsl:when test="has_camel_on_cover = 'false'">
<xsl:text>no 🐪:</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>otherwise:</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="name" />
</StringMatching>
<BoolEvaluation>
<xsl:choose>
<xsl:when test="has_camel_on_cover">
<xsl:text>🐪:</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>no 🐪:</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="name" />
</BoolEvaluation>
</xsl:for-each>
</NewRootElement>
</xsl:template>
</xsl:stylesheet>


~/devel/Perl/XML$ xsltproc books.xslt books.xml
<?xml version="1.0" encoding="utf-8"?>

<NewRootElement>
<StringMatching>🐪:Programming Perl</StringMatching>
<BoolEvaluation>🐪:Programming Perl</BoolEvaluation>
<StringMatching>no 🐪:Am Ende war die Tat</StringMatching>
<BoolEvaluation>🐪:Am Ende war die Tat</BoolEvaluation>
</NewRootElement>

bernhard@bernhard-Aspire-A515-57:~/devel/Perl/XML$

View full thread XSLT: Kann man im Template Elemente typisieren