keine doppelten XML-Werte anzeigen

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

  • keine doppelten XML-Werte anzeigen

    Hallo, ich möchte Daten aus meiner XML-Datei anzeigen lassen, jedoch sollen doppelte Werte übersprungen werden.

    Hier die DTD:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!ELEMENT Filmplan (Filmplaneintrag)+>
    3. <!ELEMENT Filmplaneintrag (Film,Kino,Uhrzeit,Saal)>
    4. <!ELEMENT Uhrzeit (#PCDATA)>
    5. <!ELEMENT Kino (Name,Adresse)>
    6. <!ELEMENT Name (#PCDATA)>
    7. <!ELEMENT Adresse (PLZ,Strasse,Nummer)>
    8. <!ELEMENT PLZ (#PCDATA)>
    9. <!ELEMENT Strasse (#PCDATA)>
    10. <!ELEMENT Nummer (#PCDATA)>
    11. <!ELEMENT Saal (SNummer,Platz)>
    12. <!ELEMENT SNummer (#PCDATA)>
    13. <!ELEMENT Platz (#PCDATA)>
    14. <!ELEMENT Film (Name,Laenge,Kategorie+,Altersfreigabe)>
    15. <!ELEMENT Laenge (#PCDATA)>
    16. <!ELEMENT Kategorie (#PCDATA)>
    17. <!ELEMENT Altersfreigabe (#PCDATA)>
    Alles anzeigen


    Nun möchte ich zb alle Kinos anzeigen.
    Kenn mich auch noch nicht so wirklich aus mit XSLT, deswegen hab ich den Ansatz hier aus dem Forum genommen.

    Quellcode

    1. <xsl:for-each select="Filmplan/Filmplaneintrag/Kino">
    2. <xsl:sort select="."/>
    3. <xsl:if test="not(preceding-sibling::Kino = .)">
    4. <xsl:value-of select="." /><br />
    5. </xsl:if>
    6. </xsl:for-each>


    Leider werden immer noch die doppelten Einträge ausgegeben.

    Fehlt da irgendwas? Oder muss ich meinen XML-Aufbau ändern, nur könnte ich dann auch noch alle Filme anzeigen lassen ohne doppelte Werte?

    Vielen Dank für jegliche Hilfe.
  • der thread dazu:
    XSLT Wordcount - doppelte Elementinhalte zählen

    Quellcode

    1. ......
    2. <Kino>
    3. <Name>Apollo</Name>
    4. <Adresse>
    5. <PLZ>1050</PLZ>
    6. <Strasse>Apollogasse</Strasse>
    7. <Nummer>15</Nummer>
    8. </Adresse>
    9. </Kino>
    10. .......
    11. <Kino>
    12. <Name>Apollo</Name>
    13. <Adresse>
    14. <PLZ>1050</PLZ>
    15. <Strasse>Apollogasse</Strasse>
    16. <Nummer>15</Nummer>
    17. </Adresse>
    18. </Kino>
    19. ......
    20. <Kino>
    21. <Name>Cineplexxx</Name>
    22. <Adresse>
    23. <PLZ>1060</PLZ>
    24. <Strasse>Mutgasse</Strasse>
    25. <Nummer>16</Nummer>
    26. </Adresse>
    27. </Kino>
    28. .......
    Alles anzeigen

    die ersten beiden sind somit komplett ident

    wo muss ich den code von dir einfügen?
    In der if-Abfrage gibts bei mir einen Fehler.
  • Da bekomm ich jetzt leider eine Fehlermeldung:
    XPathParserException: Expected ',', but found '::' instead. expression = 'not(preceding-sibling::Kino::Name = .::Name)' Remaining tokens are: ( '::' 'Name' '=' '.' '::' 'Name' ')') (Kinofilmplan.xsl, line 108, column 70)

    Ich benutze Adobe Dreamweaver 9, falls das was hilft.
  • Im Firefox funktionierts.

    Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:template match="/">
    4. <html><body>
    5. <xsl:for-each select="/Kinos/Kino">
    6. <xsl:sort select="." />
    7. <xsl:choose>
    8. <xsl:when test="not(preceding-sibling::Kino/Name=./Name)">
    9. <xsl:value-of select="." /><br/>
    10. </xsl:when>
    11. </xsl:choose>
    12. </xsl:for-each>
    13. </body></html>
    14. </xsl:template>
    15. </xsl:stylesheet>
    Alles anzeigen
  • Selbst wenn ich deinen Code einfach übernehm und sonst nichts, werden immer noch die doppelten angezeigt (Firefox 2.0.0.14 / IE 7.0.6001.1800)
    Habs auch mit Cooktop 2.5 probiert, aber leider wieder nichts.

    Fehlt mir irgendetwas in der XML-Datei oder in der DTD?
    DTD: KinofilmplanDTD.txt
    XML:

    Quellcode

    1. <?xml version="1.0"?>
    2. <!DOCTYPE Filmplan SYSTEM "Kinofilmplan.dtd" >
    3. <Filmplan>
    4. <Filmplaneintrag>
    5. <Film>
    6. <Name>Simpsons</Name>
    7. <Laenge>118</Laenge>
    8. <Kategorie>Comic</Kategorie>
    9. <Kategorie>Komoedie</Kategorie>
    10. <Altersfreigabe>10</Altersfreigabe>
    11. </Film>
    12. <Kino>
    13. <Name>Apollo</Name>
    14. <Adresse>
    15. <PLZ>1050</PLZ>
    16. <Strasse>Apollogasse</Strasse>
    17. <Nummer>15</Nummer>
    18. </Adresse>
    19. </Kino>
    20. <Uhrzeit>20:30</Uhrzeit>
    21. <Saal>
    22. <SNummer>4</SNummer>
    23. <Platz>60</Platz>
    24. </Saal>
    25. </Filmplaneintrag>
    26. <Filmplaneintrag>
    27. <Film>
    28. <Name>Meet the Spartans</Name>
    29. <Laenge>90</Laenge>
    30. <Kategorie>Komoedie</Kategorie>
    31. <Altersfreigabe>10</Altersfreigabe>
    32. </Film>
    33. <Kino>
    34. <Name>Apollo</Name>
    35. <Adresse>
    36. <PLZ>1050</PLZ>
    37. <Strasse>Apollogasse</Strasse>
    38. <Nummer>15</Nummer>
    39. </Adresse>
    40. </Kino>
    41. <Uhrzeit>20:15</Uhrzeit>
    42. <Saal>
    43. <SNummer>2</SNummer>
    44. <Platz>2</Platz>
    45. </Saal>
    46. </Filmplaneintrag>
    47. <Filmplaneintrag>
    48. <Film>
    49. <Name>Stirb schnell</Name>
    50. <Laenge>2</Laenge>
    51. <Kategorie>Hack&amp;Slay</Kategorie>
    52. <Altersfreigabe>6</Altersfreigabe>
    53. </Film>
    54. <Kino>
    55. <Name>Cineplexxx</Name>
    56. <Adresse>
    57. <PLZ>1060</PLZ>
    58. <Strasse>Mutgasse</Strasse>
    59. <Nummer>16</Nummer>
    60. </Adresse>
    61. </Kino>
    62. <Uhrzeit>16:66</Uhrzeit>
    63. <Saal>
    64. <SNummer>1</SNummer>
    65. <Platz>4</Platz>
    66. </Saal>
    67. </Filmplaneintrag>
    68. </Filmplan>
    Alles anzeigen
  • ich muss zugeben, dass ich deine DTD nur überflogen habe, aber ist ja auch deine Aufgabe zu verstehen wie das Script funktioniert ;)
    Jetzt habe ich deine XML gesehen und es ist alles klar...

    Lies dir am besten mal die Doku zu den Achsen durch: preceding-sibling nimmt das vorgänger Element relativ zur eigenen Position.
    Bei einer verschachtelten Struktur musst du aber erst einmal nach oben und dann ein Element zurück.

    Quellcode

    1. parent::Filmplaneintrag/preceding-sibling::Filmplaneintrag/Kino/Name