AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Wie in XML-Daten die Kindknoten von Kindknoten sortieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie in XML-Daten die Kindknoten von Kindknoten sortieren?

Ein Thema von toko · begonnen am 9. Jun 2005 · letzter Beitrag vom 14. Jun 2005
Antwort Antwort
toko

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

Wie in XML-Daten die Kindknoten von Kindknoten sortieren?

  Alt 9. Jun 2005, 21:24
Hallo,

ich habe nochmal eine Frage.
Wenn ich mit diesem resourcestring
Delphi-Quellcode:
  fmtXSLdata = '<?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="%s"/>' +
                     '</xsl:apply-templates>' +
                   '</xsl:copy>'+
                 '</xsl:template>'+
               '</xsl:stylesheet>';
und für den Formatbezeichner s die Strings '@id', '@titel', '@interpret' oder '@genre' eingebe, kann ich die CD-Elemente
XML-Code:
<?xml version="1.0"?>
<cdorganizer>
   <cd id="1" titel="g testcd1" interpret="testinterpret1" genre="genre1">
      <track id="1" titel="e testtrack1" interpret="testinterpret1" dauer="11:11:11"/>
      <track id="2" titel="d testtrack2" interpret="testinterpret2" dauer="11:11:12"/>
      <track id="3" titel="c testtrack3" interpret="testinterpret3" dauer="11:11:13"/>
      <track id="4" titel="b testtrack4" interpret="testinterpret4" dauer="11:11:14"/>
      <track id="5" titel="a 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>
nach dem übergebenen String sortieren.

Wie kann ich aber denn die tracks sortieren? Ich muss doch irgendwie in dem resourcestring, also in den XSL-Daten, die Knotenebene angeben können, in der ich nach den Attributen eines TrackKnoten (also im Prinzip wie oben, bloß eine Hierachie tiefer) sortieren möchte.

Könnt ihr mir helfen?
  Mit Zitat antworten Zitat
marabu

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

Re: Wie in XML-Daten die Kindknoten von Kindknoten sortieren

  Alt 10. Jun 2005, 07:36
Hallo toko,

mit dem folgenden XSLT-Code kannst du deine Daten zweistufig sortieren. Bei deinen track numbers wirst du recht bald in den zweistelligen Bereich geraten. Um dir dann Kopfschmerzen zu ersparen habe ich dem xsl:sort bereits das Attribut data-type hinzugefügt. Auch diesen Code kannst du in ein Template verwandeln, allerdings sind es jetzt zwei xsl:sort Elemente, die du dann instanziieren musst. Außerdem musst du den data-type entsprechend anpassen.

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

  <xsl:template match="cd">
    <xsl:copy>
      <xsl:apply-templates select="@* | track">
        <xsl:sort select="@titel" data-type="text"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="cdorganizer">
    <xsl:copy>
      <xsl:apply-templates select="@* | cd">
        <xsl:sort select="@id" data-type="number"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

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

</xsl:stylesheet>
Grüße vom marabu
  Mit Zitat antworten Zitat
toko

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

Re: Wie in XML-Daten die Kindknoten von Kindknoten sortieren

  Alt 10. Jun 2005, 10:33
Hallo marabu,

Danke für deine Antwort.

Zitat:
mit dem folgenden XSLT-Code kannst du deine Daten zweistufig sortieren.
heist dass, wenn ich in meinem Programm die CDs in einem Grid darstelle und die Tracks in einem anderen, dass ich das erste Grid - die CDs - nach "titel" sortieren kann und das zweite Grid - also die Tracks - nach der "id" sortieren kann?

Zitat:
Bei deinen track numbers wirst du recht bald in den zweistelligen Bereich geraten.
Bei meinen CDs kann ich ja auch schnell über 9 Einträge anlegen, oder habe ich die "Zweistelligkeit" falsch verstanden?

Zitat:
Um dir dann Kopfschmerzen zu ersparen habe ich dem xsl:sort bereits das Attribut data-type hinzugefügt.
Find ich gut . Das heißt also ich muss den data-type auf "text" setzen, wenn ich nach "titel", "interpret" und "genre" sortieren möchte und auf "number", wenn ich nach "id" und "dauer" sortieren möchte.

Zitat:
allerdings sind es jetzt zwei xsl:sort Elemente
Also muss ich einen zweiten resourcestring anlegen?

Wie du wahrscheinlich merkst, verwirrt mich diese Sache etwas. Da ich mich schon im Netz dämlich gesucht habe, kannst du mir vielleicht eine Quelle nennen, die den Aufbau solcher XSL-Daten beschreibt? Wäre echt super...

Also, wiedereinmal besten Dank für deine Hilfe...
Gruß ToKo
  Mit Zitat antworten Zitat
marabu

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

Re: Wie in XML-Daten die Kindknoten von Kindknoten sortieren

  Alt 10. Jun 2005, 11:07
Hallo toko,

Zitat von toko:
heißt dass, wenn ich in meinem Programm die CDs in einem Grid darstelle und die Tracks in einem anderen, dass ich das erste Grid - die CDs - nach "titel" sortieren kann und das zweite Grid - also die Tracks - nach der "id" sortieren kann?
Ja - du sortierst ja das XML-Dokument und entnimmst dann die Element-Werte zur Darstellung in deinen Grids.

Zitat von toko:
Bei meinen CDs kann ich ja auch schnell über 9 Einträge anlegen, oder habe ich die "Zweistelligkeit" falsch verstanden?
Genau das habe ich gemeint.

Zitat von toko:
Das heißt also ich muss den data-type auf "text" setzen, wenn ich nach "titel", "interpret" und "genre" sortieren möchte und auf "number", wenn ich nach "id" und "dauer" sortieren möchte.
Die Dauer habe ich bei deinem Beispiel-Dokument als Text in Erinnerung.

Zitat von toko:
Also muss ich einen zweiten resourcestring anlegen?
Nein, du kannst alles in einen resourcestring verpacken - die Zahl der Platzhalter ist egal.

Zitat von toko:
Da ich mich schon im Netz dämlich gesucht habe, kannst du mir vielleicht eine Quelle nennen, die den Aufbau solcher XSL-Daten beschreibt?
Ich benutze zum Nachschlagen den MS Platform SDK, du kannst dir aber auch den MSXML SDK herunterladen und installieren - der hat einen bedeutend kleineren Umfang.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
toko

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

Re: Wie in XML-Daten die Kindknoten von Kindknoten sortieren

  Alt 14. Jun 2005, 22:08
Hat jetzt endlich geklappt...
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:22 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