# XML Daten sortieren - Verständnisfrage



## Pagaty (7. Dez 2012)

Hallo,

ich bin (noch) kein Programmierer. Mein Interesse dafür ist aber groß. Nachdem ich endlich eine Anwendung/Projekt gefunden habe, mit dem ich beginnen möchte, habe ich vor zwei Monaten begonnen mich in die Sache mal einzuarbeiten.

Im Prinzip möchte ich eine Anwendung schreiben, die Daten aus einer Eingabemaske ausliest, in einer XML Datei speichert und in einem weiteren Fenster möchte ich diese Daten sortiert/gefiltert ausgeben.

Bisher fuktioniert das Auslesen und Spreichern sehr gut, und ich glaube diesen Teil habe ich verstanden.

Nun hänge ich seit einiger Zeit am Problem mit dem sortieren.

Ich kann das XML Dokument einlesen und auf die Knoten, Kindknoten und Attribute zugreifen.

Was so garnicht funktionieren will ist die Sortierung. Was wahrscheinlich auch damit zusammenhängt, das mir sicher große Teile an Grundlagenwissen fehlen.
Bisher habe ich ein paar Ansätze versucht, aber leider nicht verstanden.

Was für mich sehr hilfreich wäre, eine sinnvolle Vorgehensweise zu haben, anhand derer ich mich einarbeiten kann. Ich möchte eigendlich vermeiden Programmierbeispiele zu bekommen, da ich die Verfahrensweise verstehen will. Nur gibt es so viele Möglichkeiten (lt. google) das ich gerade den Wald vor lauter Bäumen nicht sehe.

Ich hoffe ich konnte mein Problem genau genug beschreiben.

noch mal zur Sicherheit:
In der Anwendung werden Rundenzeiten einer Carrerabahn gespeichert.
in der Form
	
	
	
	





```
<Zeitstempel ID="7">
    05.12.2012
    <Fahrer1>
      Ingo
      <Bahn1 f1_b1_runden="9" f1_b1_zeit="8.569" />
      <Bahn2 f1_b2_runden="12" f1_b2_zeit="7.985" />
      <Bahn3 f1_b3_runden="8" f1_b3_zeit="9.631" />
      <Bahn4 f1_b4_runden="15" f1_b4_zeit="7.918" />
    </Fahrer1>
  </Zeitstempel>
```

Ich möchte jetzt zum Beispiel ausgeben Welcher Fahrer wann die schnellste Runde auf Bahn 1 gefahren ist.

Über Denkanstöße bin ich dankbar.

MfG
Pagaty


----------



## AndiE (7. Dez 2012)

Wie sieht denn die Struktiur der XMl aus. Hast du sowas wie DTD oder XSD schon erstellt? auf jeden Fall sind die Attribute bei allen Einträgen unterschiedlich. Genau wie man Äpfel nicht mit Birnen vergleichen kann, geht das hier auch nicht. Deshalb kannst du sie nicht sortieren.

Vorschlag für ein DTD ( ohne Attribute) wäre etwa so:

[XML]
<!ELEMENT fahrer (name,zeiten)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT zeiten (runde)*>
<!ELEMENT runde (nummer,zeit)>
<!ELEMENT nummer (#PCDATA)>
<!ELEMENT zeit (#PCDATA)>
[/XML]

das würde dann z.B. ergeben:

[XML]
<fahrer>
  <name>klaus
  </name>
  <zeiten>
      <runde>
          <numme>1</nummer>
          <zeit>1:26,9</zeit>
      </runde>
      <runde>
          <nummer>2</nummer>
          <zeit>1:39,6</zeit>
      </runde>
  </zeiten>
</fahrer>
[/XML]

Dann kannst du den Inhalt der Kindsknoten "fahrer.zeiten.runde.zeit" miteinander vergleichen.


----------



## Pagaty (7. Dez 2012)

Hallo,

danke für die schnelle Antwort.

Mit DTD hab ich mcih noch nicht befasst. Werde mich da jetzt wohl einarbeiten müssen.
Du meinst das ich mit meiner bisherigen Struktur nicht sortieren kann. Ich hab sie jetzt mal geändert.

Meist Du so könnte es gehen?


```
<Rennen>
	<Zeitstempel ID="1">
	05.12.2012
		<Fahrer>
			<Name>
			Paul
				<Bahn1>
					<Runden>5</Runden>
					<Zeit>12.987</Zeit>
				</Bahn1>
				
				<Bahn2>
					<Runden>6</Runden>
					<Zeit>8.098</Zeit>
				</Bahn2>

				<Bahn3>
					<Runden>9</Runden>
					<Zeit>9.876</Zeit>
				</Bahn3>

				<Bahn4>
					<Runden>4</Runden>
					<Zeit>13.098</Zeit>
				</Bahn4>
			</Name>
		</Fahrer>
	</Zeitstempel>
</Rennen>
```

root ist Rennen.
Den Zeitstempel hab ich als erstes gesetzt. 
Ist es später möglich auf diesen zuzugreifen, wenn ich eine Rundenzeit als die beste ermittelt habe?

Es werden am Ende vier Fahrer sein, die auf jeder Bahn einmal gefahren sind. 
Meinst Du ich sollte im XML File vier einzelne Fahrerknoten einrichten, oder könnte es auch so gehen?

Ich habe mal versucht einen Grobentwurf des DTD zu machen.
Könnte das so hinkommen? (hab leider erst am Wochenende Zeit mich in DTD einzulesen)

```
<!ELEMENT Rennen (Zeitstempel)>
<!ELEMENT Zeitstempel (Fahrer)>
<!ELEMENT Fahrer (Bahn1, Bahnn2, Bahn3, Bahn4)>
<!ELEMENT Bahn1 (Runden, Zeit)>
<!ELEMENT Runden (#PCDATA)>
<!ELEMENT Zeit (#PCDATA)>
```

Wenn die XML Struktur dann irgendwann mal stimmt, in welche Richtung soll ich mich dann wg. des Sortierens orientieren?
Xpath?
Alles in ein Array schreiben und dann sortieren?

Danke im Voraus

Pagaty


----------



## AndiE (7. Dez 2012)

Mal was anderes- Du läßt die XML erst einmal draußen, und überlegtst, wie das System aufgebaut ist. 

Es gibt ein Rennen, an dem vier Fahrer teilnehmen. Jeder Fahrer muß auf jeder der vier Bahnen Runden fahren, und die Zeit wird abgespeichert. Es werden also 16 Läufe gefahren.

Gemeinsamer Nenner aller Läufe ist, dass sie zumindest Rundenanzahl und Zeit speichern. Zuätzlich könnten sie noch Fahrer und Bahn abspeichern. 

Wenn du das in ein Klasse legst kannst du ein Array mit 18 Einträgen der Läufe erzeugen, und in diesem Rundenzeiten berechnen, sortieren usw.

Du kannst auch ziemlich leicht die Klasse Lauf in XML umsetzen. 

ich halte das für ein sinnvolles vorgehen.


----------



## Pagaty (10. Dez 2012)

Hallo,
das hört sich richtig sinnvoll an. Danke.
Konnte leider am Wochenende garnichts machen, da wir voll im Weihnachtsgeschäft stecken.

Nur damit ich es richtig verstanden habe.

Ich fülle alles in ein Zweidimensonales Array (pro lauf eine Zeile, in der alle Werte sind).
Dann kann ich innerhalb des Arrays sortieren und meine Abfragen machen. Schreiben muss ich ja nicht, da ich die Daten nur zum auswerten brauche.

Sieht bis jetzt nach einer (für mich) überschaubaren Lösung aus.

Vielen Dank. Das könnte die Richtung sein, die ich suchte.

MfG
Pagaty


----------

