Sortierproblem?
Cyberfuzzy
- xsl
Hallo,
ich habe ein Problem mit XSL. Ich habe verschiedene Datensätze als Ausgangs-XML:
<test>
<DATENSATZ>
<ATRIKEL>12345</ATRIKEL>
<TEIL>10</TEIL>
</DATENSATZ>
<DATENSATZ>
<ATRIKEL>12345</ATRIKEL>
<TEIL>20</TEIL>
</DATENSATZ>
<DATENSATZ>
<ATRIKEL>12345</ATRIKEL>
<TEIL>30</TEIL>
</DATENSATZ>
<DATENSATZ>
<ATRIKEL>12345</ATRIKEL>
<TEIL>40</TEIL>
</DATENSATZ>
<DATENSATZ>
<ATRIKEL>10080</ATRIKEL>
<TEIL>60</TEIL>
</DATENSATZ>
<DATENSATZ>
<ATRIKEL>10080</ATRIKEL>
<TEIL>70</TEIL>
</DATENSATZ>
<DATENSATZ>
<ATRIKEL>10080</ATRIKEL>
<TEIL>80</TEIL>
</DATENSATZ>
</test>
Hier habe ich zwei Artikel und verschiedene dazugehörige Teile. Ich möchte per XSL ein HTML ausgeben, dass mir eine Ansicht gibt, bei dem einmal der Artikel gezeigt wird und daneben die zugehörigen Teile. Z. B. so:
Artikel: 12345 / dazugehörige Teile: 10, 20, 30, 40
Artikel: 10080 / dazugehörige Teile: 60, 70, 80
Wie gehe ich dazu am besten ran? Muss ich erst eine Schleife über alles machen, um festzustellen, wieviele verschiedene Artikel vorhanden sind, um diese dann in einer Variable zu speichern? Oder hat jemand eine vernünftige Idee?
Vielen Dank schonmal :-)
Grüße
Cyberfuzzy
--
http://www.cyberfuzzy.com
Hallo,
ich habe ein Problem mit XSL. Ich habe verschiedene Datensätze als Ausgangs-XML:
Hier habe ich zwei Artikel und verschiedene dazugehörige Teile. Ich möchte per XSL ein HTML ausgeben, dass mir eine Ansicht gibt, bei dem einmal der Artikel gezeigt wird und daneben die zugehörigen Teile. Z. B. so:
Artikel: 12345 / dazugehörige Teile: 10, 20, 30, 40
Artikel: 10080 / dazugehörige Teile: 60, 70, 80Wie gehe ich dazu am besten ran?
<xsl:key name="datensatz" match="DATENSATZ" use="ARTIKEL" />
...
<xsl:for-each select="DATENSATZ[generate-id() = generate-id(key('datensatz', ARTIKEL)[1])]">
<xsl:sort select="ARTIKEL" data-type="number" />
Artikel: <xsl:value-of select="ARTIKEL" /> / dazugehörige Teile:
<xsl:for-each select="key('datensatz', ARTIKEL)">
<xsl:value-of select="TEIL" />
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
<br />
</xsl:for-each>
Grüße
Thomas
Hallo,
danke für die schnelle Antwort. Bis jetzt habe ich es leider noch nicht geschafft, dass auf der Seite etwas erscheint.
Das ist meine XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:key name="datensatz" match="DATENSATZ" use="ARTIKEL" />
<xsl:template match="/">
<xsl:for-each select="DATENSATZ[generate-id() = generate-id(key('datensatz', ARTIKEL)[1])]">
<xsl:sort select="ARTIKEL" data-type="number" />
Artikel: <xsl:value-of select="ARTIKEL" /> / dazugehörige Teile:
<xsl:for-each select="key('datensatz', ARTIKEL)">
<xsl:value-of select="TEIL" />
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
<br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Garantiert habe ich nur eine Kleinigkeit übersehen, oder?
Gruß
Cyberfuzzy
--
http://www.cyberfuzzy.com
Hallo,
danke für die schnelle Antwort. Bis jetzt habe ich es leider noch nicht geschafft, dass auf der Seite etwas erscheint.
Das ist meine XSL:
ev.
<xsl:template match="/rootelement">
<xsl:for-each select="DATENSATZ[generate-id() = generate-id(key('datensatz', ARTIKEL)[1])]">
Garantiert habe ich nur eine Kleinigkeit übersehen, oder?
In dienem XML verwendest du:
<ATRIKEL>12345</ATRIKEL>
^^
Und ich habe A_RT_IKEL genommen.
Grüße
Thomas
Ach mein Gott, das hab ich wohl verbockt. Naja, vielen Dank, jetzt hat es funktioniert :-)