Verschachtelte XML Datei Problem

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

  • Verschachtelte XML Datei Problem

    Hallo zusammen,

    ich habe ein Problem mit einer verschachtelten XML Datei. Ich konnte schon einige Informationen auslesen, doch derzeit komme ich nicht weiter.

    Ich habe die Datei mal so komprimiert und vereinfacht, dass ihr mir gegebenenfalls helfen könnt bzw. es selbst testen könnt:

    xml_datei.xml:

    Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <Gruppe>
    3. <Zwischen>
    4. <Gruppe ID="1" Name="Gruppe1">
    5. <Zwischen>
    6. <Gruppe ID="2" Name="Hauptkategorie1">
    7. <Zwischen>
    8. <Gruppe ID="3" Name="Unterkategorie1">
    9. <Artikel>
    10. <GruppenArtikel ArtikelID="100">
    11. <Merkmale>
    12. <Merkmal Name="Merkmal1" Beschreibung="Beschreibung Merkmal1">Testattribut1</Merkmal>
    13. </Merkmale>
    14. </GruppenArtikel>
    15. <GruppenArtikel ArtikelID="200" />
    16. </Artikel>
    17. </Gruppe>
    18. <Gruppe ID="4" Name="Unterkategorie2">
    19. <Artikel>
    20. <GruppenArtikel ArtikelID="300" />
    21. </Artikel>
    22. </Gruppe>
    23. <Gruppe ID="5" Name="Unterkategorie3">
    24. <Artikel>
    25. <GruppenArtikel ArtikelID="400" />
    26. <Merkmale>
    27. <Merkmal Name="Merkmal2" Beschreibung="Beschreibung Merkmal2">Testattribut2</Merkmal>
    28. </Merkmale>
    29. </Artikel>
    30. </Gruppe>
    31. <Gruppe ID="6" Name="Unterkategorie4">
    32. <Artikel>
    33. <GruppenArtikel ArtikelID="500" />
    34. </Artikel>
    35. </Gruppe>
    36. </Zwischen>
    37. <Artikel>
    38. <GruppenArtikel ArtikelID="600" />
    39. </Artikel>
    40. </Gruppe>
    41. <Gruppe ID="7" Name="Hauptkategorie2">
    42. <Artikel />
    43. </Gruppe>
    44. <Gruppe ID="8" Name="Hauptkategorie3">
    45. <Artikel />
    46. </Gruppe>
    47. <Gruppe ID="9" Name="Hauptkategorie4">
    48. <Artikel>
    49. <GruppenArtikel ArtikelID="700" />
    50. </Artikel>
    51. </Gruppe>
    52. <Gruppe ID="10" Name="Hauptkategorie5">
    53. <Zwischen>
    54. <Gruppe ID="11" Name="Unterkategorie5">
    55. <Artikel>
    56. <GruppenArtikel ArtikelID="800" />
    57. </Artikel>
    58. </Gruppe>
    59. </Zwischen>
    60. <Artikel>
    61. <GruppenArtikel ArtikelID="900" />
    62. </Artikel>
    63. </Gruppe>
    64. <Gruppe ID="12" Name="Hauptkategorie6">
    65. <Zwischen>
    66. <Gruppe ID="13" Name="Unterkategorie6">
    67. <Artikel>
    68. <GruppenArtikel ArtikelID="1000" />
    69. </Artikel>
    70. </Gruppe>
    71. <Gruppe ID="14" Name="Unterkategorie7">
    72. <Artikel>
    73. <GruppenArtikel ArtikelID="1100" />
    74. </Artikel>
    75. </Gruppe>
    76. <Gruppe ID="15" Name="Unterkategorie8">
    77. <Artikel>
    78. <GruppenArtikel ArtikelID="1200" />
    79. </Artikel>
    80. </Gruppe>
    81. </Zwischen>
    82. <Artikel>
    83. <GruppenArtikel ArtikelID="1300" />
    84. </Artikel>
    85. </Gruppe>
    86. <Gruppe ID="16" Name="Hauptkategorie7">
    87. <Artikel>
    88. <GruppenArtikel ArtikelID="1400" />
    89. </Artikel>
    90. </Gruppe>
    91. </Zwischen>
    92. <Artikel />
    93. </Gruppe>
    94. <Gruppe ID="17" Name="Gruppe2">
    95. <Zwischen>
    96. <Gruppe ID="18" Name="Hauptkategorie8">
    97. <Zwischen>
    98. <Gruppe ID="19" Name="Unterkategorie9">
    99. <Artikel>
    100. <GruppenArtikel ArtikelID="1500" />
    101. </Artikel>
    102. </Gruppe>
    103. </Zwischen>
    104. <Artikel>
    105. <GruppenArtikel ArtikelID="1600" />
    106. </Artikel>
    107. </Gruppe>
    108. <Gruppe ID="20" Name="Unterkategorie10">
    109. <Artikel>
    110. <GruppenArtikel ArtikelID="1700" />
    111. </Artikel>
    112. </Gruppe>
    113. </Zwischen>
    114. <Artikel />
    115. </Gruppe>
    116. </Zwischen>
    117. <Artikel />
    118. </Gruppe>
    Alles anzeigen


    index.php:

    Quellcode

    1. // Wenn die XML-Datei existiert
    2. if(file_exists("xml_datei.xml"))
    3. {
    4. $xml = simplexml_load_file("xml_datei.xml");
    5. foreach($xml->Zwischen->Gruppe AS $variable_gruppe)
    6. {
    7. echo $variable_gruppe['ID'];
    8. echo " ";
    9. echo $variable_gruppe['Name'];
    10. echo "<br/>";
    11. foreach($variable_gruppe->Zwischen->Gruppe AS $variable_haupt)
    12. {
    13. echo "-->";
    14. echo $variable_haupt['ID'];
    15. echo " ";
    16. echo $variable_haupt['Name'];
    17. echo "<br/>";
    18. foreach($variable_haupt->Zwischen->Gruppe AS $variable_unter)
    19. {
    20. echo "---->";
    21. echo $variable_unter['ID'];
    22. echo " ";
    23. echo $variable_unter['Name'];
    24. echo "<br/>";
    25. foreach($variable_unter->Artikel->GruppenArtikel AS $variable_artikel)
    26. {
    27. echo "------>";
    28. echo $variable_artikel['ArtikelID'];
    29. echo "<br/>";
    30. }
    31. }
    32. }
    33. echo "<br/><br/>";
    34. }
    35. }
    36. // Sonst Fehlermeldung ausgeben
    37. else
    38. {
    39. echo "Konnte Datei xml_datei.xml nicht laden!";
    40. }
    Alles anzeigen


    Das Problem:
    Die Haupt- und Unterkategorien werden alle passend ausgegeben, jedoch bekomme ich einmal die Merkmal-Inhalte nicht angezeigt und es fehlen einige GruppenArtikel:
    [Blockierte Grafik: http://www.bilder-upload.eu/upload/dea1be-1384937974.png]

    Kann mir da jemand helfen? Vielen vielen Dank! Hab mich da echt festgebissen und komme nicht weiter :(
  • Hi,

    naja. Das ist nicht ganz trivial. Du hast eine interessante XML Struktur :)
    Zum Einen kann eine Gruppe weitere Untergruppen beinhalten. Zum Anderen können auch direkt Artikel drin hängen.

    Die 600 (<GruppenArtikel ArtikelID="600" />) bekommst du nicht ausgegeben, weil du in dem Bereich ja gar nicht nach Artikeln suchst.
    Du schaust nur nach Artikeln in der letzten (dir momentan bekannten) Ebene

    Quellcode

    1. foreach($variable_unter->Artikel->GruppenArtikel AS $variable_artikel)


    Hast du mal probiert eine weitere Ebene einzufügen? Da dürftest du auch keine Artikel angezeigt bekommen.

    Insgesamt wirkt das XML nicht gerade sinnvoll. Darf ich fragen, ob das XML so aus irgendeiner Quelle stammt oder hast du das frei erfunden?
    Zumindest schreit es nach einem rekursiven Parser. Denn dein Ansatz führt bei n Ebenen im XML zu n foreach-Schleifen im Code. Das ist nicht gerade der beste Weg.

    VG.
  • Habe ein ähnliches Problem schon wieder und komme nicht weiter.

    Übergeben werden auch zwei Einträge nur beinhalten beide die gleichen Daten von Rechnungsposition 1.

    Hatte jetzt gedacht es liegt vielleicht an der ID 0 ($xml->Positionen->RechnungsPos->Storno[0]) und sie variabel mit $i gestaltet und nach einem durchlauf auf 1 gesetzt, aber auch dies führte zu keinem Ergebnis (Dann war der zweite Eintrag überall 0).

    Sieht jemand sofort einen Fehler und kann mir helfen?

    Herzlichen Dank für Eure Hilfe!

    Tobbe

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tobbe5 ()