Sortierung von xml-Dateien

  • #1
D

DamonWilder

Mitglied
Themenersteller
Dabei seit
20.07.2005
Beiträge
10
Reaktionspunkte
0
Hallo Forenten,

ich habe mal wieder ein kleines Problem, mit dem ich mich als Anfänger schon wieder einen halben Tag herumschlage.

Ich habe innerhalb eines xml-Dokumentes Namen, die alphabetisch sortiert werden sollen. Mein Quelltext (schematisch):

Code:
<privatkunde>
		<name>
		Müller
		</name>
		<name>
		Meier
		</name>
		<ort n = Bonn />
</privatkunde>
<privatkunde>
	<name>
		Beerhalter
	</name>
	<name>
		Zuckmayer
	</name>
</privatkunde>
<privatkunde>
	<name>
		Schulz
	</name>
	<name>
		Gerhard
	</name>
	<ort n = München />
</privatkunde>

Das Ergebnis auf der html-Seite sollte jetzt so aussehen:

Beerhalter;
Gerhard; München
Meier; Bonn
Müller; Bonn
Schulz; München
Zuckmayer;

Mein Problem sind die Ortsangaben, die als Variablen übergeben werden. Jedes Privatkunde-Element muss m.E. mittels Schleife mehrmals durchlaufen werden... Bei mir funktioniert es aber einfach nicht. Kann mir jemand schreiben, wie die xslt-Datei wenigstens ungefähr aussehen sollte? Übrigens lässt sich das xml-Dokument nicht mehr ändern :)

Danke im Voraus!
 
  • #2
Hi

Naja zu dem XML Format sag ich mal nix 8)

In Anlehnung an sollte das so aussehen:
Code:
<xsl:for-each select=privatkunde>
   <xsl:sort select=name[0]/>
   <tr>
    <td><xsl:value-of select=name[0]/>, <td><xsl:value-of select=name[1]/></td>
   <xsl:for-each select=ort>
       <td><xsl:value-of select=@n/></td>
   </xsl:for-each>
   </tr>
</xsl:for-each>

PS: Bin ein wenig eingerostet, weiß nicht genau ob es so funktioniert.

Gruß, Michael
 
  • #3
Hi

Vergiss meinen Code-Vorschlag, der ist leider falsch
Die XML Datei solltest du am besten per XSLT in ein anderes XML Format umwandeln, denn die ist semantisch so totaler Unsinn.

Gruß, Michael
 
  • #4
Hallo Micha,

warum sollte denn meine Datei semantisch völliger Unsinn sein? Versteh ich nicht... Klar könnte man das besser strukturieren, aber falsch...
 
  • #5
Hi

Naja gehört z.B. der Ort zum Privatkunden oder zum Namen und warum sind mehrere Personen in einem Privatkunden drin. Wieviele dürfen das maximal pro Privatkunde sein.

Ich weiß z.B. nicht ob es über XSLT möglich ist in dieser Struktur nach Namen zu sortieren.

Gruß, Michael
 
  • #6
Hallo Michael,

ich gebe zu, mein Beispiel ist etwas unstrukturiert und unübersichtlich. Eigentlich möchte ich nämlich eine Art Personenregister erstellen. Vielleicht ist folgendes Beispiel einfacher zu verstehen, um mein Problem zu verdeutlichen:

Ich habe mehrere aufeinanderfolgende Textabsätze, die manchmal Namen enthalten, die wiederum mehrmals auftreten können.

Code:
<buch>
<absatz>
 Es ist sehr unwahrscheinlich, dass
   <name> 
     Aristoteles
   </name>
  den deutschen Dichter und Dramatiker
   <name>
     Brecht
   </name>
  kannte.
</absatz>
</buch>

Diese Namen sollen jetzt ausgelesen und alphabetisch aufgelistet werden, was per einfacher <xsl:sort>-Anweisung ja nicht weiter schwierig ist. Aber damit man auch weiß, auf welcher Seite die Namen stehen, werden den Textabsätzen noch Seitenzahlen zugeordnet, z.B. so:
Code:
<buch>
<absatz>
 Es ist sehr unwahrscheinlich, dass
   <name> 
     Aristoteles
   </name>
  den deutschen Dichter und Dramatiker
   <name>
     Brecht
   </name>
  kannte.
<Seitenende n = 1 />
</absatz>
<absatz>
  Vermutlich wird auch ein Herr
   <name>
     Cicero
   </name>
  einen Mann namens
   <name>
     Derrida
   </name>
   nicht gekannt haben.
<Seitenende n=2 />
</absatz>
<absatz>
  Aber sicher ist hingegen, dass
    <name>
       Nietzsche
    </name>
   sowohl
    <name>
       Schopenhauer
    </name>
       als auch 
    <name>
       Aristoteles
    </name>
   gekannt haben muss.
<Seitenende n=3 />
</absatz>
</buch>

Meiner alphabetischen Namensliste soll jetzt jeweils die Variable n hinzugefügt werden, damit man eben weiß, auf welcher Seite des Buches der Name steht. Die html-Seite soll dann so aussehen:

Aristoteles, 1, 3
Brecht, 1
Cicero, 2
Derrida, 2
Nietzsche, 3
Schopenhauer, 3

Bei meiner derzeitigen xsl-Datei wird jeder Absatz aber nur einmal durchlaufen. Dies sollte durch eine Schleife behoben werden. Aber wie? Desweiteren wirft der Browser auch die Seitenzahlen aus, wenn gar kein Name in einem Absatz enthalten ist, z.B. so

, 4

Soll er aber nicht...

Gibt es irgendwelche Lösungsansätze?

Gruß, Marcus
Code:
 
Thema:

Sortierung von xml-Dateien

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben