Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   XML - beim Auslesen werden Daten mehrfach erzeugt (https://boardunity.de/xml-beim-auslesen-daten-mehrfach-erzeugt-t5103.html)

database 17.08.2007 12:34

XML - beim Auslesen werden Daten mehrfach erzeugt
 
Hallo zusammen,

ich hab mal wieder ein Problem. Ich transformiere Daten einer XML um, um die Struktur leicht zu ändern und bestimmte Sachen hinzuzufügen.
In der Original XML ist Superhead und HeadGroup auf einer Ebene.
Ich brauche die HeadGroup allerdings eine Ebene in der Superhead verschachtelt.


Hier mal die XML:

Code:

<Seite nr="15" typ="Zubehoer">
<Zubehoer>
<Superhead mref="38305" show="yes">Allgemeines Zubehör.</Superhead>
<HeadGroup>
<Head mref="9349">Werkzeugkoffer</Head>
<SubheadGroup>
<CopyGroup>
<Copy mref="13991">Kunststoff 305 x 265 x 90 mm</Copy>
<Abbildung File="z33901065007"/>
<Wertetabelle Linie="1" Spaltenbreite="(0,1)">
<Tabellenkopf>
<Tab_Best/>
</Tabellenkopf>
<Werte>
<Bestellnummer>3 39 01 065 00 7</Bestellnummer>
</Werte>
</Wertetabelle>
</CopyGroup>
<CopyGroup>
<Copy mref="13992">Metall 390 x 240 x 110 mm</Copy>
<Abbildung File="z33901067013"/>
<Wertetabelle Linie="1" Spaltenbreite="(0,1)">
<Tabellenkopf>
<Tab_Best/>
</Tabellenkopf>
<Werte>
<Bestellnummer>3 39 01 067 01 3</Bestellnummer>
</Werte>
</Wertetabelle>
</CopyGroup>
</SubheadGroup>
</HeadGroup>
<HeadGroup>
<Head mref="9402">Balancer</Head>
<SubheadGroup>
<CopyGroup>
<Copy mref="13506">Detaillierte Angaben zu FEIN Balancer finden Sie im Kapitel Zubehör / Balancer.</Copy>
<Abbildung File=""/>
</CopyGroup>
</SubheadGroup>
</HeadGroup>

Hier mal der Auszug aus meinem Script:

Code:

<xsl:for-each select="Zubehoer">
<xsl:element name="Zubehoer">
<xsl:for-each select="Superhead">
<xsl:element name="Superhead">
<xsl:attribute name="id">
<xsl:value-of select="(concat('s',count(preceding::Superhead)+1))"/>
</xsl:attribute>
<xsl:attribute name="mref">
<xsl:value-of select="@mref"/>
</xsl:attribute>
<xsl:attribute name="show">
<xsl:value-of select="@show"/>
</xsl:attribute>
<xsl:attribute name="wert">
<xsl:value-of select="."/>
</xsl:attribute>                               
<xsl:for-each select="../HeadGroup">
<xsl:element name="HeadGroup">
<xsl:for-each select="Head">
<xsl:element name="Head">
<xsl:attribute name="mref">
<xsl:value-of select="@mref"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="SubheadGroup">
<xsl:element name="SubheadGroup">
<xsl:for-each select="CopyGroup">
<xsl:element name="CopyGroup">
<xsl:for-each select="Copy">
<xsl:element name="Copy">
<xsl:attribute name="mref">
<xsl:value-of select="@mref"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="Abbildung">
<xsl:element name="Abbildung">
<xsl:attribute name="File">
<xsl:value-of select="(concat(@File,'.jpg'))"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="Wertetabelle">
<xsl:element name="Wertetabelle">
<xsl:attribute name="Linie">
<xsl:value-of select="@Linie"/>
</xsl:attribute>
<xsl:attribute name="Spaltenbreite">
<xsl:value-of select="@Spaltenbreite"/>
</xsl:attribute>                                                   
<xsl:for-each select="Tabellenkopf">
<xsl:element name="Tabellenkopf">
<xsl:for-each select="Tab_Titel1">
<xsl:element name="Tab_Titel1">
<xsl:attribute name="mref">
<xsl:value-of select="@mref"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="Tab_Titel2">
<xsl:element name="Tab_Titel2">
<xsl:attribute name="mref">
<xsl:value-of select="@mref"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>                                                            <xsl:for-each select="Tab_Best">                                        <xsl:element name="Tab_Best">
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>

Nun habe ich folgendes Problem:
So lange in einem Seiten-Tag nur eine Superhead ist, funktioniert alles super.
Wenn jetzt aber in einem Seiten-Tag mehrere Superheads sind, dann liest er mir zu jeder Superhead alle auf der Seite vorkommenden HeadGroups aus.
Also er wählt nicht nur diejenigen aus die eigentlich zu der entsprechenden Superhead gehören. Leider bin ich gestern zu keiner Lösung gekommen. Ich denke das ich auch wieder viel zu kompliziert denke das mir einfach Fachwissen in diesem Bereich fehlt. Meine Idee war, die Headgroup anhand der erzeugten ID der Superhead zu sortieren. Leider bekomme ich das einfach nicht geregelt.
Kann mir da jemand helfen.

Vielen Dank schon einmal


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25