xml/xslt doppelte einträge entfernen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • xml/xslt doppelte einträge entfernen

    hey, bitte helft mir.

    habe folgende xml:

    Quellcode

    1. <rowset
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. nrofrows="3780">
    4. <row>
    5. <vst_id>21195</vst_id>
    6. <vstg>Die Werkstatt der Schmetterlinge</vstg>
    7. <erlaeuterung>bla</erlaeuterung>
    8. <service>ab 7 Jahre</service>
    9. <erlaeuterung>bla</erlaeuterung>
    10. <ort>Theater</ort>
    11. <vstr_name>Theater</vstr_name>
    12. <vstr_firma1>Theater</vstr_firma1>
    13. <vstr_firma2>Puppentheater</vstr_firma2>
    14. <datum_von>14.12.2006</datum_von>
    15. <datum_bis>14.12.2006</datum_bis>
    16. <zeit_von>10:00</zeit_von>
    17. <genre>Weitere Veranstaltungen</genre>
    18. </row>
    19. </rowset>
    Alles anzeigen


    wie bekomme ich mit hilfe einer xslt die doppelten Einträge von
    <erlauterungen> weg. es soll nur noch einmal erlaeuterungen
    im
    ergebnis-xml vorhanden sein.

    so hab ich es probiert, aber es funktioniert nicht, weiß jemand wo
    da der fehler liegt oder wie es gehen könnte????

    Quellcode

    1. <xsl:template match="erlaeuterung">
    2. <xsl:for-each select="erlaeuterung">
    3. <xsl:sort select="." />
    4. <xsl:if test="not(preceding-sibling::erlaeuterung =
    5. .)">
    6. <xsl:element name="erlaeuterung">
    7. <xsl:value-of select="."/>
    8. </xsl:element>
    9. </xsl:if>
    10. </xsl:for-each>
    11. </xsl:template>
    Alles anzeigen


    vielen vielen danke für eure hilfe!
  • Die Idee ist gut und sollte passen. Meine Ideen:
    -) Das foreach ist meiner Ansicht nach überflüssig, da erläuterung ja keine child Elemente namens erläuterung hat
    -) Das sort kannst du dir sparen
    -) Probiers mal mit <xsl:if test="not(preceding-sibling::erlaeuterung/text() = text()">
    -) Das Ganze könntest du dann auch direkt in template match Bedingung packen

    Ungetesteter Code:

    Quellcode

    1. <xsl:template match="erlaeuterung[not(preceding-sibling::erlaeuterung/text() = text()]">
    2. <xsl:element name="erlaeuterung">
    3. <xsl:value-of select="."/>
    4. </xsl:element>
    5. </xsl:template>


    hth