alphabetische Ausgabe (3)
josef stebegg
- xsl
Hallo.
Einen letzten Wunsch habe ich noch zur alphabetischen Ausgabe
...
<fam><name>Nf</name>
<gat><name>H.</name>
<art>Holunder</art>
</gat>
</fam>
<fam><name>Bf</name>
<gat><name>K.</name>
<art>Karde</art>
</gat>
<gat><name>S</name>
<art>Wiesensalbei</art>
<art>Gartensalbei</art>
</gat>
<gat><name>D</name>
<art>Distel</art>
</gat>
</fam>
...
...
<xsl:for-each select="fam"><xsl:sort select="." /><div class="fam"><xsl:value-of select="name"/>
<xsl:for-each select="gat"><xsl:sort select="." /><div class="gat"><xsl:value-of select="name"/>
<xsl:for-each select="art"><xsl:sort select="." /><div>
<xsl:attribute name="class">
xsl:choose
<xsl:when test="@arte = '1'">art1</xsl:when>
xsl:otherwiseart</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="."/>
</div></xsl:for-each>
</div></xsl:for-each>
</div></xsl:for-each>
...
Das ergibt :
Bf
D
Distel
K
Karde
S
Gartensalbei
Wiesensalbei
Nf
H
Holunder
Wie kann ich nun die <fam> (familien) ausschalten damit die alphabetische Ordung wieder stimmt :
D
Distel
H
Holunder
K
Karde
S
Gartensalbei
Wiesensalbei
schöne Grüße
Josef
Hallo,
Einen letzten Wunsch habe ich noch zur alphabetischen Ausgabe
Wie kann ich nun die <fam> (familien) ausschalten damit die alphabetische Ordung wieder stimmt :
Das ist mehr oder weniger so nicht machbar: wo soll denn eine Familie dargestellt werden, wenn sie zwar mehre Gattungen hat, aber es eine andere Familie gibt, die nach deiner gewünschten Sortierung dazwischen kommen müsste?
Denn dann müsste zwangsläufig so etwas rauskommen:
Bf
D
Distel
Nf
H
Holunder
Bf
K
Karde
S
Gartensalbei
Wiesensalbei
Grüße
Thomas
Bf
D
Distel
Nf
H
Holunder
Bf
K
Karde
S
Gartensalbei
Wiesensalbei
Danke für die Antwort. Wahrscheinlich habe ich schlecht formuliert. Bis jetzt ist ja mit Deiner (und Andreas) Hilfe genau das erwartete herausgekommen:
Bf
D
Distel
K
Karde
S
Gartensalbei
Wiesensalbei
Nf
H
Holunder
Wie man auch unter http://stebegg.nit.at/bienenpflanzen.xml sehen kann
In der css Datei könnte man die <fam> hidden schalten und gleich danach (wegen der Verschachtelung) die <gat> visible.
das ergibt aber:
D
Distel
K
Karde
S
Gartensalbei
Wiesensalbei
H
Holunder
und dann sind aber die Gattungen <gat> (an erster Stelle) nicht mehr alphabetisch.
Wenn die bienenpflanzen (und ähnliche Dateien) ein abgeschlossenes System wären, würde ich die <fam> (und darüberliegende Stufen) einfach herauslöschen und eine neue xml datei machen.
schöne Grüße
Josef
Hallo,
Danke für die Antwort. Wahrscheinlich habe ich schlecht formuliert. Bis jetzt ist ja mit Deiner (und Andreas) Hilfe genau das erwartete herausgekommen:
Bf
D
Distel
K
Karde
S
Gartensalbei
Wiesensalbei
Nf
H
HolunderWie man auch unter http://stebegg.nit.at/bienenpflanzen.xml sehen kann
Hast du mal das mit Firefox angeschaut?
In der css Datei könnte man die <fam> hidden schalten und gleich danach (wegen der Verschachtelung) die <gat> visible.
das ergibt aber:
D
Distel
K
Karde
S
Gartensalbei
Wiesensalbei
H
Holunderund dann sind aber die Gattungen <gat> (an erster Stelle) nicht mehr alphabetisch.
Ja und da sind wie beim selben Problem:
Wie soll H zwischen D und K hineinkommen, wenn dafür die Familie geteilt werden muss? Die Struktur des XMLs ist anders und die Ausgabe ist ebenfalls anders strukturiert (die divs).
Wenn die ausgabe anders aufgebaut werden kann, ist es möglich, da kann man nach <gat> gruppieren, aber sonst geht das nicht, bzw. die <fam> muss dann in der Ausgabe geteilt werden (heisst <div>fam 1 <div>gat A</div></div> <div>fam 2<div>gat B</div></div><div>fam 1<div>gat C</div></div>)
Grüße
Thomas
Hast du mal das mit Firefox angeschaut?
habe selber leider nur ie6, kann mir aber den Salat vorstellen. Wenn ich mit der Datei fertig bin werde ich sie sowieso mit saxon in eine html umwandeln.
Ja und da sind wie beim selben Problem:
Wie soll H zwischen D und K hineinkommen, wenn dafür die Familie geteilt werden muss? Die Struktur des XMLs ist anders und die Ausgabe ist ebenfalls anders strukturiert (die divs).
Jetzt verstehe ich Dein Argument.
Ich habe mir das zu einfach vorgestellt. Wenn ich aus dem Musterbeispiel Bf und Nf herauslösche dann bekomme ich ja
D
Distel
H
Holunder
K
Karde
S
Gartensalbei
Wiesensalbei
und dacher habe ich mir gedacht es muß doch in xsl auch etwas geben was das gleiche bewirkt.
Danke jedenfalls für Deine Hilfe.
schöne Grüße
Josef
Hallo,
Wie soll H zwischen D und K hineinkommen, wenn dafür die Familie geteilt werden muss? Die Struktur des XMLs ist anders und die Ausgabe ist ebenfalls anders strukturiert (die divs).
Jetzt verstehe ich Dein Argument.
Ich habe mir das zu einfach vorgestellt. Wenn ich aus dem Musterbeispiel Bf und Nf herauslösche dann bekomme ich ja
[...]
und dacher habe ich mir gedacht es muß doch in xsl auch etwas geben was das gleiche bewirkt.
Geben ja, aber dann passiert eben das, was ich am Ende meines vorherigen Postings geschrieben habe (der Teil mit den divs, jedenfalls so fern diese div-Struktur beibehalten werden soll.
Grüße
Thomas
Geben ja, aber dann passiert eben das, was ich am Ende meines vorherigen Postings geschrieben habe (der Teil mit den divs, jedenfalls so fern diese div-Struktur beibehalten werden soll.
Dann habe ich das doch nicht richtig verstanden.
Wenn die ausgabe anders aufgebaut werden kann ... ist das nicht eigentlich das Problem ?
(das kann ja nur durch die xsl gehen)
Wenn du von <div> schreibst, meinst du damit eine html Ausgabe (saxon) ?
Die xml könnte ich noch anders aufbauen.
<fam><name>Nf</name>
<gat><name>H.</name>
<art>Holunder</art>
</gat>
</fam>
<fam><name>Bf</name>
<gat><name>K.</name>
<art>Karde</art>
</gat>
</fam>
<fam><name>Bf</name>
<gat><name>S</name>
<art>Wiesensalbei</art>
<art>Gartensalbei</art>
</gat>
</fam>
<fam><name>Bf</name>
<gat><name>D</name>
<art>Distel</art>
</gat>
</fam>
dann kommt aber (wenn auch die fam angezeigt werden sollen) das heraus:
bf
D
Distel
nf
H
Holunder
bf
K
Karde
bf
S
Gartensalbei
Wiesensalbei
schöne Grüße
Josef
das ist richtiger:
bf
D
Distel
bf
K
Karde
bf
S
Gartensalbei
Wiesensalbei
nf
H
Holunder
Hallo,
bf
D
Distel
bf
K
Karde
bf
S
Gartensalbei
Wiesensalbei
nf
H
Holunder
Ja, aber jetzt kannst du die Familien so sortieren:
<xsl:for-each select="fam"><xsl:sort select="gat" />
Grüße
Thomas
Ja, aber jetzt kannst du die Familien so sortieren:
<xsl:for-each select="fam"><xsl:sort select="gat" />
Danke das geht doch tatsächlich. Und wenn ich die fam übergehe
habe ich auch das erhoffte Ergebnis:
D
Distel
H
Holunder
K
Karde
S
Gartensalbei
Wiesensalbei
Da habe ich wieder etwas gelernt, aber im konkreten Fall habe ich das Problem nur verlagert.
Das Ziel ist ja nur eine ! xml datei zu haben.
Wenn ich nun mit dem neuen xml Aufbau die fam auch anzeigen möchte dann bekomme ich nicht mehr wie es sein soll :
bf
D
Distel
K
Karde
S
Gartensalbei
Wiesensalbei
nf
H
Holunder
sondern :
bf
D
Distel
bf
K
Karde
bf
S
Gartensalbei
Wiesensalbei
nf
H
Holunder
schöne Grüße
Josef
Hallo,
Da habe ich wieder etwas gelernt, aber im konkreten Fall habe ich das Problem nur verlagert.
Das Ziel ist ja nur eine ! xml datei zu haben.
Du kannst ja nur eine XML-Datei haben, die muss nur anders aufgebaut sein.
Wenn ich nun mit dem neuen xml Aufbau die fam auch anzeigen möchte dann bekomme ich nicht mehr wie es sein soll :
sondern :
[...]
Das ist logisch.
Aber machen wir es anders:
Grüße
Thomas
Das soll eine Seite über die Systematik der Pflanzen werden die für Bienen wichtig sind.
Ich habe das geändert was vielleicht bei Firefox gestört hat. http://stebegg.nit.at/bienenpflanzen.xml
Die wesentliche Struktur (vereinfacht) schaut jetzt jedenfalls so aus:
<klassen>
<klasse>DREIFURCHENPOLLEN - ZWEIKEIMBLÄTTRIGE
<unterklasse><name>(noch) ohne Unterklasse</name>
<ordnung><name>Silberbaumartig</name>
<fam><name>Platanengewächse</name>
<gat><name>Platanen</name>
<art>Die ahornblättrige (gewöhnliche) Platane [Platanus x acerifolia]</art>
</gat>
</fam>
</ordnung>
<ordnung><name>Buchsbaumartige</name>
<fam><name>Buchsbaumgewächse</name>
<gat><name>Buchsbäume</name>.
<art>Der gewöhnliche Buchsbaum [Buxus sempervirens]</art>
</gat>
</fam>
<fam><name>...</name>
<gat><name>...</name>.
<art>...</art>
</gat>
</fam>
</ordnung>
</unterklasse>
...
usw.
<unterklasse>
</klasse>
</klassen>
---
<xsl:template match="klassen">
<xsl:for-each select="klasse"><xsl:sort select="." /><div class="klasse"><xsl:value-of select="child::text()"/>
<xsl:for-each select="unterklasse"><xsl:sort select="." /><div><xsl:value-of select="name"/>
<xsl:for-each select="ordnung"><xsl:sort select="." /><div class="ordnung"><xsl:value-of select="name"/>
<xsl:for-each select="fam"><xsl:sort select="." /><div class="fam"><xsl:value-of select="name"/>
<xsl:for-each select="gat"><xsl:sort select="." /><div><xsl:value-of select="name"/>
<xsl:for-each select="art"><xsl:sort select="." /><div><xsl:value-of select="."/>
</div></xsl:for-each>
</div></xsl:for-each>
</div></xsl:for-each>
</div></xsl:for-each>
</div></xsl:for-each>
</div></xsl:for-each>
</xsl:template>
(die vereinfachte xsl wird nicht genau stimmen, ich habe schon sehr viele Varianten)
Damit es übersichtlicher wird will ich die Ausgabe (mindestens) ein Mal teilen. Ein Mal bis Familien und ein Mal ab Familien.
Im Prinzip habe ich ja alles. Im ersten Fall muß ich in der css Datei die Gattungen und Arten hidden schalten und im zweiten Fall muß ich in einer eigenen xml Datei alle klasse, unterklasse und ordnungen herauslöschen. Und wenn ich nur die Gattungen und Arten ausgeben will auch die Familien (So stimmt jedenfalls die alphabetische Rangordnung und nichts ist doppelt).
Das ist aber nicht sehr elegant. Da immer wieder neue Pflanzen dazu kommen auch arbeitsaufwendig und fehleranfällig.
schöne Grüße
Josef
Hallo,
Das soll eine Seite über die Systematik der Pflanzen werden die für Bienen wichtig sind.
Ich habe das geändert was vielleicht bei Firefox gestört hat. http://stebegg.nit.at/bienenpflanzen.xml
Es stört ihm, dass das XSL vom Server mit "Content-Type: text/plain" ausgeliefert wird.
Aber das ist egal, wenn du das HTML dann lokal mit Saxon erzeugst.
Den Rest schaue ich mir dann in Ruhe an.
Grüße
Thomas
Aber das ist egal, wenn du das HTML dann lokal mit Saxon erzeugst.
Den Rest schaue ich mir dann in Ruhe an.
ja Danke
schöne Grüße
josef
Hallo,
Aber das ist egal, wenn du das HTML dann lokal mit Saxon erzeugst.
Den Rest schaue ich mir dann in Ruhe an.
Jetzt habe ich die Zeit gefunden ...
----------------------------------
Damit es übersichtlicher wird will ich die Ausgabe (mindestens) ein Mal teilen. Ein Mal bis Familien und ein Mal ab Familien.
[...] Und wenn ich nur die Gattungen und Arten ausgeben will auch die Familien (So stimmt jedenfalls die alphabetische Rangordnung und nichts ist doppelt).
Das ist aber nicht sehr elegant. Da immer wieder neue Pflanzen dazu kommen auch arbeitsaufwendig und fehleranfällig.
------------------------------------
Normalerweise tut das wenig zur Sache, aber hier hätte ich mir gewünscht, dass du etwas weniger sparsam mit den Kommatas gewesen wärst.
Also ... Ausgabe einmal bis Familien. Du hast:
reich
-abteilung
klassen
klasse
unterklasse
ordnung
fam(ilie)
gat(tung)
Das ist auf alle Fälle eine ganz andere Aufbau, als das, was bisher aus deinen XML-Fragmenten zu herauslesen war.
Es wird mir leider noch immer nicht klar was du eigentlich machen möchtest. (Ich bemühe mich dabei aber wirklich!) Willst du eine HTML-Seite in der alles drinn steht, oder willst du aus dem einen XML, am Ende mehrere HTML-Seiten produziert haben.
Aber die Ausgabe bis Familie kann ich noch nachvollziehen: angezeigt wird die Abteilung, dann wird es nach (Über-)Klassen sortiert, darin wird es nach Klassen sortiert, darin wird es nach (vielleicht noch nach Unterklassen und darin noch nach Ordnung?, aber auf alle fälle nach:) Familien sortiert.
d.h. die letze ausgegebene Information ist der Name der Familie.
Aber ab hier verstehe ich dann (noch immer) nicht.
Wie soll es denn innerhalb von Familien bzw. bei Gattung sortiert werden, wenn dies deine Struktur ist:
reich
-abteilung
klassen
klasse
unterklasse
ordnung
fam(ilie)
gat(tung)
Du kannst natürlich nach wie vor alle bisherigen Sortierkriterien unsichtbar behalten. Aber dann hast du eben _keine_ Sortierung wo alle Gattungen nach dem ABC sortiert sind, sie werden dann nur innerhalb der Familie so sortiert.
Was du defintiv nicht haben kannst ist eine Ausgabe wo:
<div>
Familie A:
<div>Gattung A</div>
<-div>Gattung B</div->
<div>Gattung C</div>
<-div>Gattung D</div->
<div>Gattung E</div>
</div>
wobei Gattung B und Gattung D aus Familie B und Familie C Stammen.
Sowas kannst du nur so haben:
<div>
Familie A:
<div>Gattung A</div>
</div>
<div>
Familie B:
<div>Gattung B</div>
</div>
<div>
Familie A:
<div>Gattung C</div>
</div>
<div>
Familie C:
<div>Gattung D</div>
</div>
<div>
Familie A:
<div>Gattung E</div>
</div>
Was du haben kannst ist:
<div>
Gattung A (Familie A)
</div>
<div>
Gattung B (Familie B)
</div>
<div>
Gattung C (Familie A)
</div>
<div>
Gattung D (Familie C)
</div>
<div>
Gattung E (Familie A)
Gattung F
Gattung G
</div>
<div>
Gattung H (Familie B)
</div>
<div>
Gattung I (Familie C)
Gattung J
</div>
Das ist alles was du haben kannst. Das hat aber weder mit XML noch mit XSL noch mit CSS zu tun, sondern nur damit, dass du größere Einheiten nicht in die in ihnen erhaltenen kleinere Einheiten stopfen kannst. (Sprich du kannst die Eischale nicht in das Eigelb stopfen, so dass die Schale unversehrt ist und das Eigelb auch noch immer enthaltet)
Grüße
Thomas
Jetzt habe ich die Zeit gefunden ...
Danke für Deinen großen Aufwand. Ich befürchte zuletzt umsonst. Alles kann man mit xml/xsl auch nicht machen.
Normalerweise tut das wenig zur Sache, aber hier hätte ich mir gewünscht, dass du etwas weniger sparsam mit den Kommatas gewesen wärst.
Durch fehlende Kommatas sind wahrscheinlich neue Mißverständnisse entstanden.
Also ... Ausgabe einmal bis Familien. Du hast:
reich
-abteilung
klassen
klasse
unterklasse
ordnung
fam(ilie)
gat(tung)Das ist auf alle Fälle eine ganz andere Aufbau, als das, was bisher aus deinen XML-Fragmenten zu herauslesen war.
In der praktischen Anwendung sind noch zwei Etagen (Kaskaden) mehr, aber das ändert ja nichts am Prinzip. Noch dazu bin ich nicht sicher ob ich überhaupt erst bei der Klasse anfangen soll.
Es wird mir leider noch immer nicht klar was du eigentlich machen möchtest. (Ich bemühe mich dabei aber wirklich!) Willst du eine HTML-Seite in der alles drinn steht, oder willst du aus dem einen XML, am Ende mehrere HTML-Seiten produziert haben.
Ja ich will (wollte) aus einer ! xml mehrere html Seiten produzieren.
Aber die Ausgabe bis Familie kann ich noch nachvollziehen: angezeigt wird die Abteilung, dann wird es nach (Über-)Klassen sortiert, darin wird es nach Klassen sortiert, darin wird es nach (vielleicht noch nach Unterklassen und darin noch nach Ordnung?, aber auf alle fälle nach:) Familien sortiert.
d.h. die letze ausgegebene Information ist der Name der Familie.
a wie Du auch schreibst hier kann ich die gat und art unsichtbar machen.
(http://stebegg.nit.at/bienenpflanzen1.xml)
Aber ab hier verstehe ich dann (noch immer) nicht.
Wie soll es denn innerhalb von Familien bzw. bei Gattung sortiert werden, wenn dies deine Struktur ist:
reich
-abteilung
klassen
klasse
unterklasse
ordnung
fam(ilie)
gat(tung)
Hier habe ich auch geschrieben das ich alles ab Ordnungen (unterkl. etc.) in einer eigenen xml (Bienenpflanzen2) lösche !
(http://stebegg.nit.at/bienenpflanzen2.xml)
Wenn auch die Seite nicht richtig angezeigt wird, so kann man es im Quelltext sehen.
schöne Grüße
josef
p.s.
Muß mich beeilen sonst fliege ich wieder aus der Leitung
Hallo,
Danke für Deinen großen Aufwand. Ich befürchte zuletzt umsonst. Alles kann man mit xml/xsl auch nicht machen.
Tja ...
Ja ich will (wollte) aus einer ! xml mehrere html Seiten produzieren.
OK, aber das kannst du immer noch.
Du muss sie Sachen nicht löschen, so eine Seite wie jetzt das b...2.xml produziert kannst du ja auch so haben.
Es bedarf nur andere Templates (mit mode) die du dann entsprechend aufrufst. Wenn du mit Saxon arbeitest, könntest du dauch xsl2 verwenden, dann könntest du die verschiedene Ausgaben direkt aus dem XSL steuern und so mehrere HTML-Seiten erstellen.
Geht auch ohne, nur muss du dann halt das mode-Wechsel selbst manuell im XSL machen und dann eine erneute Transformation auslösen.
Grüße
Thomas
PS: Wenn du schon Zwetschke (heisst übringens Zwetschge mit "g") erwähnst solltest du auch Weichsel erwähnen ;-)
OK, aber das kannst du immer noch.
[.....] manuell im XSL machen und dann eine erneute Transformation auslösen.
Da habe ich momentan keine Vorstellung.
Jetzt hast Du dir aber eine Pause verdient. Danke nochmals und frohe Ostern.
PS: Wenn du schon Zwetschke (heisst übringens Zwetschge mit "g") erwähnst solltest du auch Weichsel erwähnen ;-)
Ich mache sowieso zwei Ausführungen, eine österreichische und eine deutsche (incl. Weichseln).
schöne Grüße (bis zu alphabetische Ausgabe (4))
Josef