[PHP+XML] array structuur voor XML in PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Ik ben bezig met het schrijven van een eigen class voor PHP voor het verwerken van XML-files en het toepassen van stylesheets daarop.

Nu zullen de meeste vragen: waarom?
  • zit vast aan een server waarop expat en sablotron niet werken :'(
  • heb geen classes van anderen kunnen vinden die voldoen aan mijn wensen (te log of te simpel: bv maar 2 lagen diep of teveel overbodige functies)
  • kan ook geen db gebruiken (niet aanwezig) :'(
Nu dus mijn probleem.
Ik heb al genoeg ideeen over welke functies ik wil hebben en hoe ze moeten werken, maar... Ik kan niet besluiten hoe ik de XML data in een array in moet delen. Ik heb een aantal ideeen maar wil wel een methode kiezen die ook in de toekomst nog werkt.

Ideeen:
  1. Normaal heb je 1 root element waarin je diverse blokken hebt. Bv een agenda met meerdere activiteiten. Ik dacht de elementen binnen de blokken gewoon in een platte array te zetten en voor elke activiteit een eigen array te maken. (mogelijk in een eigen class).
    PHP:
    1
    2
    3
    4
    
    array( datum => 31-12-04,
           titel => eindjaar,
           enz....
    )

    Maar wat als hier nu weer meerdere dezefde tags voorkomen. Bv meerdere data, (mag dit eigenlijk wel?) dan werkt de array niet goed meer.
    De structuur van elk blok haal ik dan uit de DTD.
  2. Elke tag een eigen plaats in een array geven (of een eigen array) met hierin alle info die nodig is; parent node, childnode, diepte in de structuur en natuurlijk de bijbehorende tekst.

    Levert dit alleen niet heel veel data op en werkt nog wel makkelijk? Bij voorbeeld voor het sorteren van de activiteiten op datum. Dit lijkt mij makkelijker met het 1e idee.
Dit zijn eigenlijk mijn hoofdideeen. De rest zijn iedere keer aanpassingen hierop.
Hebben jullie hier nog goede of duidelijk meningen over? Ik kon geen overtuigende structuren vinden. Of kan iemand mij vertellen hoe expat het eruit gooit?

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Expat maakt callbacks naar door jou gedefinieerde functies (startElement(name, attributes, content), endElement(name), cdataSection(content)).

Ik denk echter dat je het meer in de richting van het DOM moet zoeken. Hierbij heb je een tree van nodes die bijv. een tag representeren.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<xml>
   <troep>flappie</troep>
</xml>

Node:
  name: xml
  children:
      Node:
         name: troep
         children:
             Node:
              type: text
              content: flappie


Je kan dit het best implementeren met objects die via references naar de andere nodes verwijzen. Als het goed is zouden er best veel implementaties van dit soort shit moeten zijn (ik meen me er een te herinneren van iemand op GoT die zelf een herimplementatie van DOM had geschreven).

[ Voor 31% gewijzigd door djc op 13-12-2004 10:00 ]

Rustacean


Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Ik ben al druk aan het zoeken geweest hiernaar maar heb er geen kunnen vinden. (alleen 1 uit 2001 maar die kon ik niet meer te pakken krijgen)

Verdere versies die ik heb gevonden zijn zeeer simpel: maar tot 2 of 3 niveau's diep of je moet van te voren opgeven welke tags er allemaal aanwezig zijn, of ze zijn enorm groot en log (Xpath) waarvan ik 99% niet gebruik. Deze zijn ook zo groot dat ik er niet even iets in terug kan vinden.
Manuzhai schreef op maandag 13 december 2004 @ 09:58:
...
Je kan dit het best implementeren met objects die via references naar de andere nodes verwijzen. ...
Dit is idd ook nog een idee. Ik heb eigenlijk nog nooit gewerkt met references (had er nooit echt nut voor). Dit beantwoord gelijk mijn vraag waar die dingen goed te gebruiken zouden zijn.
Ik ga daar eens wat over lezen.

Zijn er verder nog meer ideeën van mensen?
Of nuttige links?

edit:

voor het sorteren van die nodes zal waarschijnlijk geen standaard functie zijn. Is dit een beetje te doen?

[ Voor 45% gewijzigd door J_Davelaar op 13-12-2004 14:08 . Reden: Uitbreiding ]

Was ik maar een punt dan was ik het einde