You are not logged in.

  • Login

1

Thursday, July 3rd 2008, 1:53pm

XML neu strukturieren. Doppelte zuordnen

Hallo!

Ich habe ein XML-Dokument bekommen, das folgendermaßen aussieht (Auszug):

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
<KATALOG>
	<ROW>
	   <Kuenstler>Kuenstler A</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_1</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>111</Besitz_Nr>
	   <Startpreis>100</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
	</ROW>
	<ROW>
	   <Kuenstler>Kuenstler A</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_2</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>111</Besitz_Nr>
	   <Startpreis>110</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
	</ROW>
	<ROW>
	   <Kuenstler>Kuenstler A</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_3</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_3</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>111</Besitz_Nr>
	   <Startpreis>115</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
 	</ROW>
	<ROW>
	   <Kuenstler>Kuenstler B</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler B</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_1</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>200</Besitz_Nr>
	   <Startpreis>200</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 30</Siehe_auch_Info>
 	</ROW>
	<ROW>
	   <Kuenstler>Kuenstler B</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler B</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_2</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>200</Besitz_Nr>
	   <Startpreis>300</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 30</Siehe_auch_Info>
 	</ROW>
</KATALOG>



Nun will ich (ich vermute mit XSLT) das XML-Dokument neu organisieren, damit es folgende Struktur bekommt:

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
<KATALOG>
	<ROW>
	   <Kuenstler>Kuenstler A</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_1</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>111</Besitz_Nr>
	   <Startpreis>100</Startpreis>
	   <Objekt_Titel>Bild_2</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>111</Besitz_Nr>
	   <Startpreis>110</Startpreis>
	   <Objekt_Titel>Bild_3</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_3</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>111</Besitz_Nr>
	   <Startpreis>115</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
 	</ROW>
	<ROW>
	   <Kuenstler>Kuenstler B</Kuenstler>
	   <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	   <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler B</Kuenstler_Info_lang>
	   <Objekt_Titel>Bild_1</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>200</Besitz_Nr>
	   <Startpreis>200</Startpreis>
	   <Objekt_Titel>Bild_2</Objekt_Titel>
	   <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
	   <Bildart>Farbabbildung</Bildart>
	   <Besitzer_Nr>200</Besitz_Nr>
	   <Startpreis>300</Startpreis>
	   <Siehe_auch_Info>Siehe auch Seite 30</Siehe_auch_Info>
 	</ROW>
</KATALOG>


Es sollen also alle doppelten Einträge wie <Kuenstler>, <Kuenstler_Info_kurz>, <Kuenstler_Info_lang> und <Siehe_auch_Info> rausfliegen, damit die Objekte den Künstlern zugeordnet werden können. Bei einfacheren XML-Dokumenten hab ich das hinbekommen, nicht aber bei diesem. Ich bin mir auch gar nicht sicher, ob das bei diesem so funktioniert, wie ich mir das vorstelle. :S
Ich beschäftige mich auch noch nicht so lang mit dem Thema, daher freue ich mich über jede Hilfe!! :rolleyes:
Sollte ich es vielleicht doch irgendwie hinbekommen, werde ich es auch ausführlich dokumentieren.

Danke schon mal im Voraus!

Grüße gonzo

2

Thursday, July 3rd 2008, 7:35pm

Naja, mach doch mal einen Anfang. Wie du doppelte Nodes findest, erfährst du hier:
XSLT Wordcount - doppelte Elementinhalte zählen

3

Friday, July 4th 2008, 4:14pm

außerdem:

XML Code

1
<Besitzer_Nr>111</Besitz_Nr>


Hau mal denjenigen, der die XML-Datei erstellt hat. ;)

4

Thursday, July 10th 2008, 2:07pm

Naja, mach doch mal einen Anfang. Wie du doppelte Nodes findest, erfährst du hier:
XSLT Wordcount - doppelte Elementinhalte zählen

Da war ich auch schon, habs aber damals noch nicht ganz begriffen. Jetzt scheint es, als ob ich zumindest schon mal auf dem richtigen Weg bin. Die XML-Datei wurde noch ein wenig verändert:

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
<Katalog>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler A</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang/>
	    <Subkategorie>Ölbild</Subkategorie>
	    <Titel>Bild 1</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 1</Objekt_Beschreibung>
	    <Bildart>Farbbild</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>320</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler A</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang/>
	    <Subkategorie>Ölbild</Subkategorie>
	    <Titel>Bild 2</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 2</Objekt_Beschreibung>
	    <Bildart>Farbbild</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>450</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler A</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang/>
	    <Subkategorie>Collage</Subkategorie>
	    <Titel>Bild 3</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 3</Objekt_Beschreibung>
	    <Bildart>Farbbild</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>150</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler A</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang/>
	    <Subkategorie>Radierung</Subkategorie>
	    <Titel>Bild 4</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 4</Objekt_Beschreibung>
	    <Bildart>Schwarz-Weiß</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>800</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler B</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
	    <Subkategorie>Ölbild</Subkategorie>
	    <Titel>Bild 1</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 1</Objekt_Beschreibung>
	    <Bildart>Farbbild</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>185</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler B</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
	    <Subkategorie>Ölbild</Subkategorie>
	    <Titel>Bild 2</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 2</Objekt_Beschreibung>
	    <Bildart>Farbbild</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>855</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler B</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
	    <Subkategorie>Lithographie</Subkategorie>
	    <Titel>Bild 3</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 3</Objekt_Beschreibung>
	    <Bildart>Schwarz-Weiß</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>9855</Startpreis>
	</ROW>
	<ROW>
	    <Hauptkategorie>Bilder</Hauptkategorie>
	    <Kuenstler>Kuenstler B</Kuenstler>
	    <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
	    <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
	    <Subkategorie>Radierung</Subkategorie>
	    <Titel>Bild 4</Titel>
	    <Objekt_Beschreibung>Infotext zu Bild 4</Objekt_Beschreibung>
	    <Bildart>Schwarz-Weiß</Bildart>
	    <Besitzer_Nr>(1930)</Besitzer_Nr>
	    <Startpreis>555</Startpreis>
	</ROW>
</Katalog>


Mit folgendem Stylesheet, bekomme ich dann jetzt schon eine Sortierung hin, die mich nah an mein Ziel bringt.

Stylesheet:

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
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
 <xsl:template match="/">
 <html><body>
 
  <xsl:for-each select="Katalog/ROW">
   <xsl:choose>
    <xsl:when test="not(preceding-sibling::ROW/Hauptkategorie = Hauptkategorie)">
     <h2>
      <xsl:value-of select="Hauptkategorie" />
     </h2>
      <h3>
       <xsl:text>- </xsl:text>
       <xsl:value-of select="Kuenstler" />
      </h3>
     <xsl:text>~ </xsl:text>
     <xsl:value-of select="Subkategorie" />
     <br/>
     <xsl:text>====> </xsl:text>
     <xsl:value-of select="Titel" />
     <br/>
    </xsl:when>
    <xsl:otherwise>
     <xsl:choose>
      <xsl:when test="not(preceding-sibling::ROW/Kuenstler = Kuenstler)">
       <h3>
        <xsl:text>- </xsl:text>
        <xsl:value-of select="Kuenstler" />
       </h3>
       <xsl:text>~ </xsl:text>
       <xsl:value-of select="Subkategorie" />
       <br/>
       <xsl:text>====> </xsl:text>
       <xsl:value-of select="Titel" />
       <br/>
      </xsl:when>
      <xsl:otherwise>
       <xsl:choose>
        <xsl:when test="not(preceding-sibling::ROW/Subkategorie = Subkategorie)">
         <xsl:text>~ </xsl:text>
         <xsl:value-of select="Subkategorie" />
         <br/>
         <xsl:text>====> </xsl:text>
         <xsl:value-of select="Titel" />
         <br/>
        </xsl:when>
        <xsl:otherwise>
         <xsl:text>====> </xsl:text>
         <xsl:value-of select="Titel" />
         <br/>
        </xsl:otherwise>
       </xsl:choose>
      </xsl:otherwise>
     </xsl:choose>
    </xsl:otherwise>
   </xsl:choose>
  </xsl:for-each>
 
  </body></html>
  </xsl:template>
 
</xsl:stylesheet>


Das Ergebnis sieht nun so aus:

HTML Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<body>
<html>
<h2>Bilder</h2>
<h3>- Kuenstler A</h3>
~ Ölbild
====> Bild 1
====> Bild 2
~ Collage
====> Bild 3
~ Radierung
====> Bild 4
 
<h3>- Kuenstler B</h3>
~ Ölbild
====> Bild 1
====> Bild 2
~ Lithographie
====> Bild 3
====> Bild 4
</html>
</body>



Ich sortiere erst nach "Hauptkategorie", dann "Kuenstler", dann "Subkategorie" und lasse mir zu jeder "Subkategorie" die einzelnen Bilder anzeigen. Die anderen Elemente hab ich jetzt erstmal weggelassen, sonst steig ich gar nicht mehr durch 8|

Aber bin trotzdem erstmal happy, dass ichs bis hierher geschafft hab 8)

5

Thursday, July 10th 2008, 2:14pm

außerdem:

XML Code

1
<Besitzer_Nr>111</Besitz_Nr>


Hau mal denjenigen, der die XML-Datei erstellt hat. ;)
<Besitzer_Nr> ... das war mein Fehler. Hab da mit copy-paste gearbeitet :whistling:

...hab richtig zugehauen :D und daher werden wir noch etwas an der Datenbank rumschrauben und sie hoffentlich verbessern :thumbsup:


Danke euch fürs Feedback! Werde bestimmt noch ein paar Fragen haben...

Grüße
gonzo

Similar threads

Social bookmarks