Hallo,
ich habe einen Datensatz bekommen, den ich gerne auswerten möchte. Jedoch ist die Datenstruktur dieser XML-Dateien nicht so, wie ich es mir vorstelle.
Das Problem ist, dass die Ausgangsdateien eine "Ebene" zuviel haben. Die Felder, welche die Feldbeschreibungen enthalten sollen entfernt werden.
|
XML Code
|
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
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- Filename="TEST.XML" -->
<Export Count="1" Date="2009-05-14T18:00:00" Language="DE" Range="DE">
<DataRecord>
<Feldbeschreibung1>
<Feld1>DATA</Feld1>
<Feld2>DATA</Feld2>
</Feldbeschreibung1>
<Feldbeschreibung2>
<Feld3>DATA</Feld3>
<Feld4>DATA</Feld4>
</Feldbeschreibung2>
<Feldbeschreibung3>
<Feld5>DATA</Feld5>
<Feld6>DATA</Feld6>
</Feldbeschreibung3>
<Feldbeschreibung4>
<Feld7>DATA</Feld7>
<Feld8>DATA</Feld8>
</Feldbeschreibung4>
<Feldbeschreibung5>
<Feld9>DATA</Feld9>
<Feld10>DATA</Feld10>
<Feld11>DATA</Feld11>
<Feld12>DATA</Feld12>
<Feld13>DATA</Feld13>
<Feld14>DATA</Feld14>
<Feld15>DATA</Feld15>
</Feldbeschreibung5>
<Feldbeschreibung6>
<Feld16>DATA</Feld16>
<Feld17>DATA</Feld17>
</Feldbeschreibung6>
<Feldbeschreibung7>
<Feld18>DATA</Feld18>
</Feldbeschreibung7>
<Feldbeschreibung8>
<Feld19>DATA</Feld19>
<Feld20>DATA</Feld20>
<Feld21>DATA</Feld21>
<Feld22>DATA</Feld22>
</Feldbeschreibung8>
<Feldbeschreibung9>
<Feld23>DATA</Feld23>
</Feldbeschreibung9>
</DataRecord>
</Export>
|
Dies ist ein Beispiel für die Struktur der Ausgangsdatei, wobei der Usprungsdatensatz eine sehr viel größere Menge solcher <DataRecords> umfasst.
Ich kann mithilfe der folgenden XSL-Datei und Saxonica die Struktur ändern, jedoch gelingt es mir nur, wenn es lediglich einen <DataRecord> in der XML-Datei gibt.
|
XML Code
|
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="//DataRecord">
<DataRecord>
<xsl:for-each select="//Feld1">
<Feld1>
<xsl:value-of select="."></xsl:value-of>
</Feld1>
</xsl:for-each>
<xsl:for-each select="//Feld2">
<Feld2>
<xsl:value-of select="."></xsl:value-of>
</Feld2>
</xsl:for-each>
<xsl:for-each select="//Feld3">
<Feld3>
<xsl:value-of select="."></xsl:value-of>
</Feld3>
</xsl:for-each>
<xsl:for-each select="//Feld4">
<Feld4>
<xsl:value-of select="."></xsl:value-of>
</Feld4>
</xsl:for-each>
<xsl:for-each select="//Feld5">
<Feld5>
<xsl:value-of select="."></xsl:value-of>
</Feld5>
</xsl:for-each>
<xsl:for-each select="//Feld6">
<Feld6>
<xsl:value-of select="."></xsl:value-of>
</Feld6>
</xsl:for-each>
<xsl:for-each select="//Feld7">
<Feld7>
<xsl:value-of select="."></xsl:value-of>
</Feld7>
</xsl:for-each>
<xsl:for-each select="//Feld8">
<Feld8>
<xsl:value-of select="."></xsl:value-of>
</Feld8>
</xsl:for-each>
<xsl:for-each select="//Feld9">
<Feld9>
<xsl:value-of select="."></xsl:value-of>
</Feld9>
</xsl:for-each>
<xsl:for-each select="//Feld10">
<Feld10>
<xsl:value-of select="."></xsl:value-of>
</Feld10>
</xsl:for-each>
<xsl:for-each select="//Feld11">
<Feld11>
<xsl:value-of select="."></xsl:value-of>
</Feld11>
</xsl:for-each>
<xsl:for-each select="//Feld12">
<Feld12>
<xsl:value-of select="."></xsl:value-of>
</Feld12>
</xsl:for-each>
<xsl:for-each select="//Feld13">
<Feld13>
<xsl:value-of select="."></xsl:value-of>
</Feld13>
</xsl:for-each>
<xsl:for-each select="//Feld14">
<Feld14>
<xsl:value-of select="."></xsl:value-of>
</Feld14>
</xsl:for-each>
<xsl:for-each select="//Feld15">
<Feld15>
<xsl:value-of select="."></xsl:value-of>
</Feld15>
</xsl:for-each>
<xsl:for-each select="//Feld16">
<Feld16>
<xsl:value-of select="."></xsl:value-of>
</Feld16>
</xsl:for-each>
<xsl:for-each select="//Feld17">
<Feld17>
<xsl:value-of select="."></xsl:value-of>
</Feld17>
</xsl:for-each>
<xsl:for-each select="//Feld18">
<Feld18>
<xsl:value-of select="."></xsl:value-of>
</Feld18>
</xsl:for-each>
<xsl:for-each select="//Feld19">
<Feld19>
<xsl:value-of select="."></xsl:value-of>
</Feld19>
</xsl:for-each>
<xsl:for-each select="//Feld20">
<Feld20>
<xsl:value-of select="."></xsl:value-of>
</Feld20>
</xsl:for-each>
<xsl:for-each select="//Feld21">
<Feld21>
<xsl:value-of select="."></xsl:value-of>
</Feld21>
</xsl:for-each>
<xsl:for-each select="//Feld22">
<Feld22>
<xsl:value-of select="."></xsl:value-of>
</Feld22>
</xsl:for-each>
<xsl:for-each select="//Feld23">
<Feld23>
<xsl:value-of select="."></xsl:value-of>
</Feld23>
</xsl:for-each>
</DataRecord>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
|
Im Beispielfall gelingt es mir mit dieser XSL-Datei aus der Ausgangs XML-Datei die folgende Datei zu generieren, welche die gewünschte Struktur besitzt.
|
XML Code
|
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
|
<?xml version="1.0" encoding="UTF-8"?>
<DataRecord>
<Feld1>DATA</Feld1>
<Feld2>DATA</Feld2>
<Feld3>DATA</Feld3>
<Feld4>DATA</Feld4>
<Feld5>DATA</Feld5>
<Feld6>DATA</Feld6>
<Feld7>DATA</Feld7>
<Feld8>DATA</Feld8>
<Feld9>DATA</Feld9>
<Feld10>DATA</Feld10>
<Feld11>DATA</Feld11>
<Feld12>DATA</Feld12>
<Feld13>DATA</Feld13>
<Feld14>DATA</Feld14>
<Feld15>DATA</Feld15>
<Feld16>DATA</Feld16>
<Feld16>DATA</Feld16>
<Feld17>DATA</Feld17>
<Feld18>DATA</Feld18>
<Feld19>DATA</Feld19>
<Feld20>DATA</Feld20>
<Feld21>DATA</Feld21
><Feld22>DATA</Feld22>
<Feld23>DATA</Feld23>
</DataRecord>
|
Ich hoffe es wird einigermaßen klar, welches Ziel ich mit der Vorgehensweise verfolge.
Ich bin bei weitem kein Programmierer und habe mich für dieses Projekt zum ersten Mal mit XSL/XML wirklich auseinandergesetzt.
Die Frage ist jetzt eigentlich gibt es eventuell eine einfachere Syntax, für die XSL-Datei, und wie bekomme ich es hin, dass es für eine beliebige Anzahl von <DataRecords> funktioniert?
Vielen Dank für Antworten!