AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie in XML-Datei sortieren?

Ein Thema von toko · begonnen am 30. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
Seite 1 von 3  1 23      
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#1

Wie in XML-Datei sortieren?

  Alt 30. Mai 2005, 20:33
Hallo,

ich bin es mal wieder. Ich kann nun sauber in meiner XML-Datei Knoten/Attribute lesen und schreiben.
(Danke noch mal an MathiasSimmack )
Die Daten schreibe ich dabei durch meine Anwendung sofort in diese Datei:
XML-Code:
<?xml version="1.0"?>
<cdorganizer>
   <cd id="1" titel="g testcd1" interpret="testinterpret1" genre="genre1">
   <track id="1" titel="testtrack1" interpret="testinterpret1" dauer="11:11:11"/>
   <track id="2" titel="testtrack2" interpret="testinterpret2" dauer="11:11:12"/>
   <track id="3" titel="testtrack3" interpret="testinterpret3" dauer="11:11:13"/>
   <track id="4" titel="testtrack4" interpret="testinterpret4" dauer="11:11:14"/>
   <track id="5" titel="testtrack5" interpret="testinterpret5" dauer="11:11:15"/>
   </cd>
   <cd id="2" titel="f testcd2" interpret="testinterpret2" genre="genre2"></cd>
   <cd id="3" titel="e testcd3" interpret="testinterpret3" genre="genre3"></cd>
   <cd id="4" titel="d testcd4" interpret="testinterpret4" genre="genre4"></cd>
   <cd id="5" titel="c testcd5" interpret="testinterpret5" genre="genre5"></cd>
   <cd id="6" titel="b testcd6" interpret="testinterpret6" genre="genre6"></cd>
   <cd id="7" titel="a testcd7" interpret="testinterpret7" genre="genre7"></cd>
</cdorganizer>
In der Anwendung selbst werden die CD's dann in einem TStringGrid dargestellt. In einem zweiten TStringGrid werden zu einer markierten CD die Tracks dargestellt.
Ich möchte nun die Daten alphabetisch sortieren.

Geht das ohne Benutzung von Listen? Wenn ja, bin ich für jeden Tipp sehr dankbar. Wenn nein, dann hab ich das Problem der Listenbenutzung hier versucht zu beschreiben.
Kann ich eventuell den Sortieralgorithmus "Sort" von TStringList/TList verwenden?
Mir stellt sich jedoch die Frage, was dann mit der/den Liste/Kindknoten zu einer CD passiert?

Falls ich mich unverständlich ausdrücke, bitte ruhig melden, dann erläutere ich das Thema genauer.

Gruß

[edit=Matze]Beitrag aufgrund eines Caching-Fehlers neu abgesendet. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Wie in XML-Datei sortieren?

  Alt 30. Mai 2005, 20:51
Was möchtest du sortieren? Die Daten im Programm? Oder die Daten in der XML-Datei?
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#3

Re: Wie in XML-Datei sortieren?

  Alt 30. Mai 2005, 22:50
wenn ich so recht überlege brauche ich gar nicht die Daten in der XML-Datei zu sortieren, sondern nur die im TStringGrid.
Es soll mit der Sortierung einfach nur eine übersichtlichere Art des Lesens erreicht werden.

Ok, also ich möchte die Daten im Programm sortieren.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Wie in XML-Datei sortieren?

  Alt 31. Mai 2005, 08:02
Hallo toko,

deine über DOM zugänglichen internen XML-Daten könntest du mit XSLT umsortieren. Dazu musst du nur xsl:sort in eine identity transformation verpacken. So sieht das dann aus, wenn du nach "titel" sortieren willst:

Code:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/ | @* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()">
        <xsl:sort select="@titel"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
Wenn deine XML-Daten in xmlDoc bereit stehen und dieses Skript in xmlStyle, dann wird die Sortierung deiner XML-Daten durch folgenden Aufruf durchgeführt:

xmlDoc.loadXML(xmlDoc.transformNode(xmlStyle)); Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Wie in XML-Datei sortieren?

  Alt 31. Mai 2005, 08:05
Zitat von toko:
wenn ich so recht überlege brauche ich gar nicht die Daten in der XML-Datei zu sortieren, sondern nur die im TStringGrid.
Ganz genau. Und wenn du statt dem StringGrid auch noch eine ListView verwendest, kannst du mit Hilfe dieses Codes die Sortierung waehrend der Laufzeit aendern. Die Anordnung der Daten in der Datei sollte naemlich nichts mit jener im Programm zu tun haben, jedenfalls nicht bei deinem Beispiel

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#6

Re: Wie in XML-Datei sortieren?

  Alt 31. Mai 2005, 09:54
Hi,

danke für eure Beiräge. Ich werde beide Variante mal heute abend probieren . Ich lasse jedoch dieses Thema so lange offen, falls sich noch meinerseits Fragen ergeben.

Gruß
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#7

Re: Wie in XML-Datei sortieren?

  Alt 31. Mai 2005, 23:40
Hallo,

@alcaeus
Ich habe mir überlegt erst mal die Variente von marabu zu probieren. Da es eine Forderung ist meine Daten in einem TStringGrid darzustellen.
Da ich auch ziemlich weit mit der Programmierung fortgeschritten bin, ist es etwas mühsam die Grids und die darauf aufbauenden Funktionen auf ListViews umzustellen. Ich behalte es aber im Hinterkopf.

@marabu
Zitat:
Dazu musst du nur xsl:sort in eine identity transformation verpacken.
Wie mache ich das genau? Wo muss ich diesen Code
Delphi-Quellcode:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/ | @* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()">
        <xsl:sort select="@titel"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
abspeichern? Muss ich dafür eine .XSL-Datei mit selben Namen wie die XML-Datei anlegen?

Mit
xmlDoc.load(xmlfile); lade ich übrigens meine XML-Datei. In xmlfile steht der Pfad der Datei.

Wo ist den der Unterschied zwischen "load" und "loadXML". Bei "loadXML" bekomme ich einen parseError.

Kannst du deine quasi-Anleitung etwas genauer beschreiben?
Danke...

Gruß ToKo

[edit=Matze]Beitrag aufgrund eines Caching-Fehlers neu abgesendet. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 06:49
Hallo ToKo,

voraus schicken möchte ich, dass ich dir bei einem Teilproblem im XML-Bereich helfe, dir aber für dein Projekt wahrscheinlich einen Bärendienst erweise. Du sprichst von Anforderungen, aber es ist mir nicht klar, wer die formuliert hat - du selbst oder ein anderer. Ich fürchte, dass es einfach nur Entscheidungen sind, die du vor deinem persönlichen Erfahrungshorizont getroffen hast. Ich würde einen CD-Manager voll in die Windows Shell integrieren und das Speicherformat hätte ich wahrscheinlich von FreeDB übernommen.
Der lockere Hinweis von alcaeus an dich enthält einen Wink mit dem Zaunpfahl: Wenn du alle Funktionalität in dein Stringgrid eingebaut haben wirst, dann wird jeder Betrachter sich fragen, warum du nicht gleich eine ListView genommen hast.

Aber das alles ist dein Projekt, sind deine Entscheidungen. Kommen wir zu deinem XML-Problem.

Zitat von toko:
Wie mache ich das genau? Wo muss ich diesen Code abspeichern? Muss ich dafür eine .XSL-Datei mit selben Namen wie die XML-Datei anlegen?
Zuerst brauchst du eine zweite Variable xmlStyle neben deiner xmlDoc Variable. Mit xmlDoc hast du deine XML-Daten geladen, xmlStyle nimmt den XSLT-Code auf. Bei mir sind beide vom Typ IXMLDOMDocument. Du musst abwägen, ob du nur eine oder mehrere Sortierungen benötigst. Wenn es nur um die eine Sortierung geht, dann kannst du den XSLT-Code in einer Datei mit der Erweiterung XSL speichern und diese mit xmlStyle.load() laden. Ich empfehle dir aber einen resourcestring fmtXSLsort zu verwenden, in dem du den für die Sortierung ausgewählten Knoten @titel durch %s ersetzt und vor dem Sortieren mit der Anweisung

xmlStyle.loadXML(Format(fmtXSLsort, ['@titel'])); lädst. Hier solltest du erkennen, dass mit load() eine Datei mit einem bestimmten URL geladen wird, während mit loadXML() ein XML-String geladen wird.

Grüße vom marabu
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#9

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 17:56
Hallo marabu,

Zitat:
voraus schicken möchte ich, dass ich dir bei einem Teilproblem im XML-Bereich helfe, dir aber für dein Projekt wahrscheinlich einen Bärendienst erweise.
Das weiß ich ja auch zu schätzen.


Zitat:
Du sprichst von Anforderungen, aber es ist mir nicht klar, wer die formuliert hat - du selbst oder ein anderer. Ich fürchte, dass es einfach nur Entscheidungen sind, die du vor deinem persönlichen Erfahrungshorizont getroffen hast.
Ich programmiere diese Anwendung im Rahmen eines Wahlpflichtfachs meines Studiums, welches auch lediglich nur eine Einführung ist. Dabei hatten wir einige Komponenten und Techniken besprochen, welche wir dann in einer "simplen" CD-Verwaltung benutzen sollten. Unter anderem viel dabei der Satz: "CDs können in einer TStringGrid angezeigt werden. Ein Mausklick in der ersten Reihe einer Spalte bewirkt das Sortieren der TStringGrid nach den Daten in der Spalte." und "CDs können in einer Datei gespeichert werden, und aus dieser Datei eingelesen werden." Das ich dann XML-Dateien benutze, schien mir sinnvoller, als INI-Dateien oder "normale" Textdateien.

Zitat:
Der lockere Hinweis von alcaeus an dich enthält einen Wink mit dem Zaunpfahl: Wenn du alle Funktionalität in dein Stringgrid eingebaut haben wirst, dann wird jeder Betrachter sich fragen, warum du nicht gleich eine ListView genommen hast.
Ich wollte halt erstmal die Variante mit der XML-Sortierung testen, da ich mit der ListView-Komponente noch keine Erfahrungen gesammelt habe. Ich werde mich nachher mal damit auseinandersetzen, ob ich mit der ListView die gleichen(besseren) Eigenschaften/Methoden habe, wie(als) mit dem StringGrid. Ich denke mal, wenn ich eine sinnvollere Komponente als die StringGris eingesetzt habe, dann kann man das gegenüber dem Prof erwähnen. Wobei ich denke, dass er dann auch die Lösung mit ListView favorisieren wird.

Zitat:
Aber das alles ist dein Projekt, sind deine Entscheidungen.
Ich lasse mich gerne eines besseren belehren. Falls das anders angekommen ist, Sorry! Ich weiß, dass ich durch DP eine kompetente und schnelle Hilfe bekomme; und brauche auch so nicht noch mehr Zeit in die Anwendung investieren, als dass ich schon tue.

Wie gesagt, danke für deine/eure Hilfe.

Ich werde nun mal versuchen meine Sortiergeschichte zu lösen...
mfg
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 19:07
Zitat:
Falls das anders angekommen ist, Sorry!
Ganz und gar nicht.

Ich hatte ein schlechtes Gewissen bei meinen Vorbemerkungen, da ich unsicher war, wie ich am besten helfen kann.

Ich würde zwar die Benutzer-Oberfläche eher mit einer ListView als mit einem StringGrid gestalten, aber zum Sortieren würde ich die ListView nicht verwenden können, da ich die Daten grundsätzlich in Daten-Containern verwalte und nicht in UI-Controls.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz