![]() |
Wie in XML-Datei sortieren?
Hallo,
ich bin es mal wieder. Ich kann nun sauber in meiner XML-Datei Knoten/Attribute lesen und schreiben. (Danke noch mal an MathiasSimmack :thumb: ) Die Daten schreibe ich dabei durch meine Anwendung sofort in diese Datei:
XML-Code:
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.
<?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> 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 ![]() 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] |
Re: Wie in XML-Datei sortieren?
Was möchtest du sortieren? Die Daten im Programm? Oder die Daten in der XML-Datei?
|
Re: Wie in XML-Datei sortieren?
:gruebel: 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. |
Re: Wie in XML-Datei sortieren?
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:
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:
<?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>
Delphi-Quellcode:
Grüße vom marabu
xmlDoc.loadXML(xmlDoc.transformNode(xmlStyle));
|
Re: Wie in XML-Datei sortieren?
Zitat:
![]() Greetz alcaeus |
Re: Wie in XML-Datei sortieren?
Hi,
danke für eure Beiräge. Ich werde beide Variante mal heute abend probieren :coder: . Ich lasse jedoch dieses Thema so lange offen, falls sich noch meinerseits Fragen ergeben. Gruß |
Re: Wie in XML-Datei sortieren?
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:
Delphi-Quellcode:
abspeichern? Muss ich dafür eine .XSL-Datei mit selben Namen wie die XML-Datei anlegen?
<?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> Mit
Delphi-Quellcode:
lade ich übrigens meine XML-Datei. In xmlfile steht der Pfad der Datei.
xmlDoc.load(xmlfile);
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] |
Re: Wie in XML-Datei sortieren?
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:
Delphi-Quellcode:
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.
xmlStyle.loadXML(Format(fmtXSLsort, ['@titel']));
Grüße vom marabu |
Re: Wie in XML-Datei sortieren?
Hallo marabu,
Zitat:
Zitat:
Zitat:
Zitat:
Wie gesagt, danke für deine/eure Hilfe. Ich werde nun mal versuchen meine Sortiergeschichte zu lösen... mfg |
Re: Wie in XML-Datei sortieren?
Zitat:
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz