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.
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$