XML-Datei rekursiv durchgehen, wie?
Thomas12
- programmiertechnik
0 Chrisi0 Frank (no reg)
Hallo,
ich habe folgendes Problem und mir fehlt ein Lösungsansatz.
Ich habe ein XML-ähnliche Datei, die wie folgt aufgebaut ist:
...
<frame>
...
...
<frame>
<rect>
....
</rect>
</frame>
<frame>
<rect>
....
</rect>
<object>
</object>
</frame>
....
</frame>
...
Zu jedem <frame> kann es eine oder mehrere <rect>'s geben. Ich brauche alle zusammengehoerigen <rect>'s eines <frame> und muss die auswerten.
Ich weiss nicht, wieviele <frame>'s es gibt und auch nicht, wie tief die verschachtelt sind. Es gibt in der Datei bis zu 4 Ebenen.
Nun dachte ich mir, ich geh das rekursiv durch, aber mir fehlt das Verstaendnis dafuer bzw. irgendwie die Abbruchbedingung.
Also wann weiss der Programmcode, das das </frame> auftaucht und das es ein <frame> 'hoeher' muss?
Das ganze muss in PHP geloest werden.
Kann mir da evtl. jmd. einen Loesungsansatz sagen?
Danke Thomas
Hallo,
Nun dachte ich mir, ich geh das rekursiv durch, aber mir fehlt das Verstaendnis dafuer bzw. irgendwie die Abbruchbedingung.
Also wann weiss der Programmcode, das das </frame> auftaucht und das es ein <frame> 'hoeher' muss?
Selber denken lohnt da garnicht mehr, wenn du php5 nutzen kannst lese deinen XML file mit SimpleXML "http://de2.php.net/simplexml" ein, dann hast du einen Array und kannst auf deine einzellen Elemente auch ohne Rekursion zugreifen :)
Viele Grüße, Chrisi ...
'n Abend!
Wenn deine Konstrukt "wohlgeformt" ist, dann kannst dafür einen XML Parser verwenden.
XML Parser bieten verschiedene Zugriffsmöglichkeiten:
XPath ist eine Abfragesprache für XML Knoten. Ein imho recht gutes Tutorial zu XPath findest du auf http://w3schools.com
Eine Query mit "//rect" würde alle Elemente des Namens <rect> aus deinem XML herausfinden. Mit "//frame/rect" würdest du alle <rect> Elemente, die direkte Kinder von <frame> sind zurückbekommen.
Es liegt an dir, dann die geeigneten Abfragen zu schreiben.
Da ich deine technischen Voraussetzungen nicht kenne, kann ich dir in Sachen XML API (Parser) nicht weiterhelfen.
Ciao, Frank