XML neu strukturieren. Doppelte zuordnen

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

  • XML neu strukturieren. Doppelte zuordnen

    Hallo!

    Ich habe ein XML-Dokument bekommen, das folgendermaßen aussieht (Auszug):

    Quellcode

    1. <KATALOG>
    2. <ROW>
    3. <Kuenstler>Kuenstler A</Kuenstler>
    4. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    5. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
    6. <Objekt_Titel>Bild_1</Objekt_Titel>
    7. <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
    8. <Bildart>Farbabbildung</Bildart>
    9. <Besitzer_Nr>111</Besitz_Nr>
    10. <Startpreis>100</Startpreis>
    11. <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
    12. </ROW>
    13. <ROW>
    14. <Kuenstler>Kuenstler A</Kuenstler>
    15. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    16. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
    17. <Objekt_Titel>Bild_2</Objekt_Titel>
    18. <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
    19. <Bildart>Farbabbildung</Bildart>
    20. <Besitzer_Nr>111</Besitz_Nr>
    21. <Startpreis>110</Startpreis>
    22. <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
    23. </ROW>
    24. <ROW>
    25. <Kuenstler>Kuenstler A</Kuenstler>
    26. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    27. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
    28. <Objekt_Titel>Bild_3</Objekt_Titel>
    29. <Objekt_Beschreibung>Infotext zu Bild_3</Objekt_Beschreibung>
    30. <Bildart>Farbabbildung</Bildart>
    31. <Besitzer_Nr>111</Besitz_Nr>
    32. <Startpreis>115</Startpreis>
    33. <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
    34. </ROW>
    35. <ROW>
    36. <Kuenstler>Kuenstler B</Kuenstler>
    37. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    38. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler B</Kuenstler_Info_lang>
    39. <Objekt_Titel>Bild_1</Objekt_Titel>
    40. <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
    41. <Bildart>Farbabbildung</Bildart>
    42. <Besitzer_Nr>200</Besitz_Nr>
    43. <Startpreis>200</Startpreis>
    44. <Siehe_auch_Info>Siehe auch Seite 30</Siehe_auch_Info>
    45. </ROW>
    46. <ROW>
    47. <Kuenstler>Kuenstler B</Kuenstler>
    48. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    49. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler B</Kuenstler_Info_lang>
    50. <Objekt_Titel>Bild_2</Objekt_Titel>
    51. <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
    52. <Bildart>Farbabbildung</Bildart>
    53. <Besitzer_Nr>200</Besitz_Nr>
    54. <Startpreis>300</Startpreis>
    55. <Siehe_auch_Info>Siehe auch Seite 30</Siehe_auch_Info>
    56. </ROW>
    57. </KATALOG>
    Alles anzeigen



    Nun will ich (ich vermute mit XSLT) das XML-Dokument neu organisieren, damit es folgende Struktur bekommt:

    Quellcode

    1. <KATALOG>
    2. <ROW>
    3. <Kuenstler>Kuenstler A</Kuenstler>
    4. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    5. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler A</Kuenstler_Info_lang>
    6. <Objekt_Titel>Bild_1</Objekt_Titel>
    7. <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
    8. <Bildart>Farbabbildung</Bildart>
    9. <Besitzer_Nr>111</Besitz_Nr>
    10. <Startpreis>100</Startpreis>
    11. <Objekt_Titel>Bild_2</Objekt_Titel>
    12. <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
    13. <Bildart>Farbabbildung</Bildart>
    14. <Besitzer_Nr>111</Besitz_Nr>
    15. <Startpreis>110</Startpreis>
    16. <Objekt_Titel>Bild_3</Objekt_Titel>
    17. <Objekt_Beschreibung>Infotext zu Bild_3</Objekt_Beschreibung>
    18. <Bildart>Farbabbildung</Bildart>
    19. <Besitzer_Nr>111</Besitz_Nr>
    20. <Startpreis>115</Startpreis>
    21. <Siehe_auch_Info>Siehe auch Seite 10</Siehe_auch_Info>
    22. </ROW>
    23. <ROW>
    24. <Kuenstler>Kuenstler B</Kuenstler>
    25. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    26. <Kuenstler_Info_lang>Kurze Info zum Leben von Kuenstler B</Kuenstler_Info_lang>
    27. <Objekt_Titel>Bild_1</Objekt_Titel>
    28. <Objekt_Beschreibung>Infotext zu Bild_1</Objekt_Beschreibung>
    29. <Bildart>Farbabbildung</Bildart>
    30. <Besitzer_Nr>200</Besitz_Nr>
    31. <Startpreis>200</Startpreis>
    32. <Objekt_Titel>Bild_2</Objekt_Titel>
    33. <Objekt_Beschreibung>Infotext zu Bild_2</Objekt_Beschreibung>
    34. <Bildart>Farbabbildung</Bildart>
    35. <Besitzer_Nr>200</Besitz_Nr>
    36. <Startpreis>300</Startpreis>
    37. <Siehe_auch_Info>Siehe auch Seite 30</Siehe_auch_Info>
    38. </ROW>
    39. </KATALOG>
    Alles anzeigen


    Es sollen also alle doppelten Einträge wie <Kuenstler>, <Kuenstler_Info_kurz>, <Kuenstler_Info_lang> und <Siehe_auch_Info> rausfliegen, damit die Objekte den Künstlern zugeordnet werden können. Bei einfacheren XML-Dokumenten hab ich das hinbekommen, nicht aber bei diesem. Ich bin mir auch gar nicht sicher, ob das bei diesem so funktioniert, wie ich mir das vorstelle. :S
    Ich beschäftige mich auch noch nicht so lang mit dem Thema, daher freue ich mich über jede Hilfe!! :rolleyes:
    Sollte ich es vielleicht doch irgendwie hinbekommen, werde ich es auch ausführlich dokumentieren.

    Danke schon mal im Voraus!

    Grüße gonzo
  • d0nut schrieb:

    Naja, mach doch mal einen Anfang. Wie du doppelte Nodes findest, erfährst du hier:
    XSLT Wordcount - doppelte Elementinhalte zählen

    Da war ich auch schon, habs aber damals noch nicht ganz begriffen. Jetzt scheint es, als ob ich zumindest schon mal auf dem richtigen Weg bin. Die XML-Datei wurde noch ein wenig verändert:

    Quellcode

    1. <Katalog>
    2. <ROW>
    3. <Hauptkategorie>Bilder</Hauptkategorie>
    4. <Kuenstler>Kuenstler A</Kuenstler>
    5. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    6. <Kuenstler_Info_lang/>
    7. <Subkategorie>Ölbild</Subkategorie>
    8. <Titel>Bild 1</Titel>
    9. <Objekt_Beschreibung>Infotext zu Bild 1</Objekt_Beschreibung>
    10. <Bildart>Farbbild</Bildart>
    11. <Besitzer_Nr>(1930)</Besitzer_Nr>
    12. <Startpreis>320</Startpreis>
    13. </ROW>
    14. <ROW>
    15. <Hauptkategorie>Bilder</Hauptkategorie>
    16. <Kuenstler>Kuenstler A</Kuenstler>
    17. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    18. <Kuenstler_Info_lang/>
    19. <Subkategorie>Ölbild</Subkategorie>
    20. <Titel>Bild 2</Titel>
    21. <Objekt_Beschreibung>Infotext zu Bild 2</Objekt_Beschreibung>
    22. <Bildart>Farbbild</Bildart>
    23. <Besitzer_Nr>(1930)</Besitzer_Nr>
    24. <Startpreis>450</Startpreis>
    25. </ROW>
    26. <ROW>
    27. <Hauptkategorie>Bilder</Hauptkategorie>
    28. <Kuenstler>Kuenstler A</Kuenstler>
    29. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    30. <Kuenstler_Info_lang/>
    31. <Subkategorie>Collage</Subkategorie>
    32. <Titel>Bild 3</Titel>
    33. <Objekt_Beschreibung>Infotext zu Bild 3</Objekt_Beschreibung>
    34. <Bildart>Farbbild</Bildart>
    35. <Besitzer_Nr>(1930)</Besitzer_Nr>
    36. <Startpreis>150</Startpreis>
    37. </ROW>
    38. <ROW>
    39. <Hauptkategorie>Bilder</Hauptkategorie>
    40. <Kuenstler>Kuenstler A</Kuenstler>
    41. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    42. <Kuenstler_Info_lang/>
    43. <Subkategorie>Radierung</Subkategorie>
    44. <Titel>Bild 4</Titel>
    45. <Objekt_Beschreibung>Infotext zu Bild 4</Objekt_Beschreibung>
    46. <Bildart>Schwarz-Weiß</Bildart>
    47. <Besitzer_Nr>(1930)</Besitzer_Nr>
    48. <Startpreis>800</Startpreis>
    49. </ROW>
    50. <ROW>
    51. <Hauptkategorie>Bilder</Hauptkategorie>
    52. <Kuenstler>Kuenstler B</Kuenstler>
    53. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    54. <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
    55. <Subkategorie>Ölbild</Subkategorie>
    56. <Titel>Bild 1</Titel>
    57. <Objekt_Beschreibung>Infotext zu Bild 1</Objekt_Beschreibung>
    58. <Bildart>Farbbild</Bildart>
    59. <Besitzer_Nr>(1930)</Besitzer_Nr>
    60. <Startpreis>185</Startpreis>
    61. </ROW>
    62. <ROW>
    63. <Hauptkategorie>Bilder</Hauptkategorie>
    64. <Kuenstler>Kuenstler B</Kuenstler>
    65. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    66. <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
    67. <Subkategorie>Ölbild</Subkategorie>
    68. <Titel>Bild 2</Titel>
    69. <Objekt_Beschreibung>Infotext zu Bild 2</Objekt_Beschreibung>
    70. <Bildart>Farbbild</Bildart>
    71. <Besitzer_Nr>(1930)</Besitzer_Nr>
    72. <Startpreis>855</Startpreis>
    73. </ROW>
    74. <ROW>
    75. <Hauptkategorie>Bilder</Hauptkategorie>
    76. <Kuenstler>Kuenstler B</Kuenstler>
    77. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    78. <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
    79. <Subkategorie>Lithographie</Subkategorie>
    80. <Titel>Bild 3</Titel>
    81. <Objekt_Beschreibung>Infotext zu Bild 3</Objekt_Beschreibung>
    82. <Bildart>Schwarz-Weiß</Bildart>
    83. <Besitzer_Nr>(1930)</Besitzer_Nr>
    84. <Startpreis>9855</Startpreis>
    85. </ROW>
    86. <ROW>
    87. <Hauptkategorie>Bilder</Hauptkategorie>
    88. <Kuenstler>Kuenstler B</Kuenstler>
    89. <Kuenstler_Info_kurz>Geburtsdatum und -ort</Kuenstler_Info_kurz>
    90. <Kuenstler_Info_lang>Hier gibt es eine längere Beschreibung zum Kuenstler B</Kuenstler_Info_lang>
    91. <Subkategorie>Radierung</Subkategorie>
    92. <Titel>Bild 4</Titel>
    93. <Objekt_Beschreibung>Infotext zu Bild 4</Objekt_Beschreibung>
    94. <Bildart>Schwarz-Weiß</Bildart>
    95. <Besitzer_Nr>(1930)</Besitzer_Nr>
    96. <Startpreis>555</Startpreis>
    97. </ROW>
    98. </Katalog>
    Alles anzeigen


    Mit folgendem Stylesheet, bekomme ich dann jetzt schon eine Sortierung hin, die mich nah an mein Ziel bringt.

    Stylesheet:

    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="Katalog/ROW">
    6. <xsl:choose>
    7. <xsl:when test="not(preceding-sibling::ROW/Hauptkategorie = Hauptkategorie)">
    8. <h2>
    9. <xsl:value-of select="Hauptkategorie" />
    10. </h2>
    11. <h3>
    12. <xsl:text>- </xsl:text>
    13. <xsl:value-of select="Kuenstler" />
    14. </h3>
    15. <xsl:text>~ </xsl:text>
    16. <xsl:value-of select="Subkategorie" />
    17. <br/>
    18. <xsl:text>====> </xsl:text>
    19. <xsl:value-of select="Titel" />
    20. <br/>
    21. </xsl:when>
    22. <xsl:otherwise>
    23. <xsl:choose>
    24. <xsl:when test="not(preceding-sibling::ROW/Kuenstler = Kuenstler)">
    25. <h3>
    26. <xsl:text>- </xsl:text>
    27. <xsl:value-of select="Kuenstler" />
    28. </h3>
    29. <xsl:text>~ </xsl:text>
    30. <xsl:value-of select="Subkategorie" />
    31. <br/>
    32. <xsl:text>====> </xsl:text>
    33. <xsl:value-of select="Titel" />
    34. <br/>
    35. </xsl:when>
    36. <xsl:otherwise>
    37. <xsl:choose>
    38. <xsl:when test="not(preceding-sibling::ROW/Subkategorie = Subkategorie)">
    39. <xsl:text>~ </xsl:text>
    40. <xsl:value-of select="Subkategorie" />
    41. <br/>
    42. <xsl:text>====> </xsl:text>
    43. <xsl:value-of select="Titel" />
    44. <br/>
    45. </xsl:when>
    46. <xsl:otherwise>
    47. <xsl:text>====> </xsl:text>
    48. <xsl:value-of select="Titel" />
    49. <br/>
    50. </xsl:otherwise>
    51. </xsl:choose>
    52. </xsl:otherwise>
    53. </xsl:choose>
    54. </xsl:otherwise>
    55. </xsl:choose>
    56. </xsl:for-each>
    57. </body></html>
    58. </xsl:template>
    59. </xsl:stylesheet>
    Alles anzeigen


    Das Ergebnis sieht nun so aus:

    Quellcode

    1. <body>
    2. <html>
    3. <h2>Bilder</h2>
    4. <h3>- Kuenstler A</h3>
    5. ~ Ölbild
    6. ====> Bild 1
    7. ====> Bild 2
    8. ~ Collage
    9. ====> Bild 3
    10. ~ Radierung
    11. ====> Bild 4
    12. <h3>- Kuenstler B</h3>
    13. ~ Ölbild
    14. ====> Bild 1
    15. ====> Bild 2
    16. ~ Lithographie
    17. ====> Bild 3
    18. ====> Bild 4
    19. </html>
    20. </body>
    Alles anzeigen



    Ich sortiere erst nach "Hauptkategorie", dann "Kuenstler", dann "Subkategorie" und lasse mir zu jeder "Subkategorie" die einzelnen Bilder anzeigen. Die anderen Elemente hab ich jetzt erstmal weggelassen, sonst steig ich gar nicht mehr durch 8|

    Aber bin trotzdem erstmal happy, dass ichs bis hierher geschafft hab 8)
  • McSush schrieb:

    außerdem:

    Quellcode

    1. <Besitzer_Nr>111</Besitz_Nr>


    Hau mal denjenigen, der die XML-Datei erstellt hat. ;)
    <Besitzer_Nr> ... das war mein Fehler. Hab da mit copy-paste gearbeitet :whistling:

    ...hab richtig zugehauen :D und daher werden wir noch etwas an der Datenbank rumschrauben und sie hoffentlich verbessern :thumbsup:


    Danke euch fürs Feedback! Werde bestimmt noch ein paar Fragen haben...

    Grüße
    gonzo