Hallo,
ich verarbeite XML-Daten, die aus einer Datenbank kommen. Funktioniert alles super. Nun wurde die XML-Schnittstelle erweitert und das XSL muss angepasst werden ... und ich habe noch keinen Lösungsansatz.
Beispiel XML alte Schnittstelle:
Beispiel XSL:
Bei der Transformation wird die Gruppen-Struktur beibehalten und die Objekte werden neu sortiert.
erzeugte XML-Datei:
Nun können Objekte auch Objekte beinhalten, die auf eine Gruppe referenzieren. Diese beinhalteten Objekte sollen der Gruppe zugeordnet und dort eingefügt werden. Falls die Gruppe noch nicht vorhanden ist, dann soll die Gruppe erzeugte und an der richtigen Stelle / Ebene eingeordnet werden.
Beispiel XML-Datei neu:
herauskommen soll:
Mir ist noch nicht ganz klar, wie ich an die Sache herangehen soll bzw. von wo aus man ansetzt.
Hat jemand einen Vorschlag. Ich bin sehr dankbar für alle Vorschläge und Hinweise.
Die id´s der unterschiedlichen Ebenen sind unterschiedlich lang d.h. erste Ebene ein Zeichen, zweite Ebene 3 Zeichen, dritte Ebene 4 Zeichen usw.
Danke schon mal im voraus!
ich verarbeite XML-Daten, die aus einer Datenbank kommen. Funktioniert alles super. Nun wurde die XML-Schnittstelle erweitert und das XSL muss angepasst werden ... und ich habe noch keinen Lösungsansatz.
Beispiel XML alte Schnittstelle:
Code:
<root> <Gruppe id="A"> <Gruppe id="A_1"> <Gruppe id="A_11"> <Objekt sortierfeld="dddd">...</Objekt> <Objekt sortierfeld="hhhh">...</Objekt> <Objekt sortierfeld="aaaa">...</Objekt> </Gruppe> </Gruppe> </Gruppe> <Gruppe id="B">...</Gruppe> <Gruppe id="C">...</Gruppe> </root>
Code:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:output indent="yes"/> <xsl:template match="/root"> <root> <xsl:apply-templates select="Gruppe"/> </root> </xsl:template> <xsl:template match="Gruppe"> <Gruppe> <xsl:copy-of select="@id"/> <xsl:for-each select="Objekt"> <xsl:sort select="@sortierfeld" order="ascending" data-type="text" /> <xsl:copy-of select="."/> </xsl:for-each> <xsl:apply-templates select="Gruppe"/> </Gruppe> </xsl:template> </xsl:stylesheet>
erzeugte XML-Datei:
Code:
<root> <Gruppe id="A"> <Gruppe id="A_1"> <Gruppe id="A_11"> <Objekt sortierfeld="aaaa">...</Objekt> <Objekt sortierfeld="dddd">...</Objekt> <Objekt sortierfeld="hhhh">...</Objekt> </Gruppe> </Gruppe> </Gruppe> <Gruppe id="B">...</Gruppe> <Gruppe id="C">...</Gruppe> </root>
Beispiel XML-Datei neu:
Code:
<root> <Gruppe id="A"> <Gruppe id="A_1"> <Gruppe id="A_11"> <Objekt sortierfeld="dddd"> <Objekt sortierfeld="eeee"><Referenz id="A_A11"/></Objekt> <Objekt sortierfeld="ffff"><Referenz id="G"/></Objekt> <Objekt sortierfeld="gggg"><Referenz id="B"/></Objekt> </Objekt> <Objekt sortierfeld="hhhh">...</Objekt> <Objekt sortierfeld="aaaa">...</Objekt> </Gruppe> </Gruppe> </Gruppe> <Gruppe id="B">...</Gruppe> <Gruppe id="C">...</Gruppe> </root>
Code:
<root> <Gruppe id="A"> <Gruppe id="A_1"> <Gruppe id="A_11"> <Objekt sortierfeld="aaaa">...</Objekt> <Objekt sortierfeld="dddd">...</Objekt> <Objekt sortierfeld="eeee">...</Objekt> <Objekt sortierfeld="hhhh">...</Objekt> </Gruppe> </Gruppe> </Gruppe> <Gruppe id="B"> <Objekt sortierfeld="gggg">...</Objekt> </Gruppe> <Gruppe id="C">...</Gruppe> <Gruppe id="G"> <Objekt sortierfeld="ffff">...</Objekt> </Gruppe> </root>
Hat jemand einen Vorschlag. Ich bin sehr dankbar für alle Vorschläge und Hinweise.
Die id´s der unterschiedlichen Ebenen sind unterschiedlich lang d.h. erste Ebene ein Zeichen, zweite Ebene 3 Zeichen, dritte Ebene 4 Zeichen usw.
Danke schon mal im voraus!
Comment