Hallo,
ich bin gerade dabei ein XSL zur Umwandlung von XML-Daten, die aus einer Datenbank kommen zu schreiben.
Eigentlich dachte ich ja, dass es nicht so schwierig ist, aber zur Zeit stehe ich total auf dem Schlauch und komme irgendwie nicht mehr weiter.
Ich hoffe, dass mir jemand helfen kann.
Ich scheitere bei folgender Aufgabe:
Mein Quelldokument sieht in vereinfachter Form so aus:
Die Ausgabe stelle ich mir so vor:
Das bedeutet, dass alle Personen eines Produktes ausgegeben werden sollen, wobei doppelte Einträge nicht doppelt ausgegeben werden sollen. Dabei soll nur das erste Exemplar betrachtet werden.
Außerdem soll, wenn die Anzahl der auszugebenden Personen größer als 3 ist "mehrere Personen" ausgegeben werden.
Leider scheitere ich schon bei der Ausgabe der Personen. Ich habe schon mehreres probiert.
Hätte jemand eine Idee / einen Ansatz?
Meine XSL sieht wie folgt aus. Problem ist, dass alle Personen gruppiert werden. Ich brauche aber eine Gruppierung für jedes Produkt. Wie kann man das realisieren?
Eigentlich kann es doch nicht so schwer sein?!?
Übrigens verwende ich XSLT 1.0.
Vielen Dank schon mal im voraus.
ich bin gerade dabei ein XSL zur Umwandlung von XML-Daten, die aus einer Datenbank kommen zu schreiben.
Eigentlich dachte ich ja, dass es nicht so schwierig ist, aber zur Zeit stehe ich total auf dem Schlauch und komme irgendwie nicht mehr weiter.
Ich hoffe, dass mir jemand helfen kann.
Ich scheitere bei folgender Aufgabe:
Mein Quelldokument sieht in vereinfachter Form so aus:
Code:
<Produkt> <Exemplar> <CD> <Person id="1">Krüger</Person> <Person id="2">Müller</Person> </CD> <CD> <Person id="1">Krüger</Person> <Person id="3">Schmidt</Person> </CD> </Exemplar> <Exemplar>...</Exemplar> </Produkt> <Produkt> <Exemplar> <CD> <Person id="4">Hermann</Person> <Person id="5">Müllermann</Person> </CD> <CD> <Person id="3">Schmidt</Person> <Person id="5">Müllermann</Person> </CD> </Exemplar> <Exemplar>...</Exemplar> <Exemplar>...</Exemplar> </Produkt> <Produkt> <Exemplar> <CD> <Person id="4">Hermann</Person> <Person id="5">Müllermann</Person> <Person id="7">Schulze</Person> </CD> <CD> <Person id="6">Meyer</Person> <Person id="5">Müllermann</Person> </CD> </Exemplar> <Exemplar>...</Exemplar> </Produkt>
Code:
<Produkt> <Person id="1">Krüger</Person> <Person id="2">Müller</Person> <Person id="3">Schmidt</Person> </Produkt> <Produkt> <Person id="4">Hermann</Person> <Person id="5">Müllermann</Person> <Person id="3">Schmidt</Person> </Produkt> <Produkt> <Person>mehrere Personen</Person> </Produkt>
Außerdem soll, wenn die Anzahl der auszugebenden Personen größer als 3 ist "mehrere Personen" ausgegeben werden.
Leider scheitere ich schon bei der Ausgabe der Personen. Ich habe schon mehreres probiert.
Hätte jemand eine Idee / einen Ansatz?
Meine XSL sieht wie folgt aus. Problem ist, dass alle Personen gruppiert werden. Ich brauche aber eine Gruppierung für jedes Produkt. Wie kann man das realisieren?
Code:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="test" match="Person" use="@id"/> <xsl:template match="/"> <xsl:call-template name="Person"/> </xsl:template> <xsl:template name="Person"> <xsl:for-each select="Produkt"> <Produkt> <xsl:for-each select="Exemplar[1]/CD/Person[generate-id() = generate-id(key('test',@id)[1])]"> <xsl:copy-of select="."/> </xsl:for-each> </Produkt> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Eigentlich kann es doch nicht so schwer sein?!?
Übrigens verwende ich XSLT 1.0.
Vielen Dank schon mal im voraus.
Comment