[PHP/XML] Hoe genereer ik XML?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 10-09 11:45
Misschien een hele domme vraag, maar ik vind in de search en op php.net genoeg over het parsen van XML files, maar ik wil nu d.m.v. php xml bestanden genereren. Is dit te bereiken met PHP functies, of moet ik gewoon met echo en een zooi while's een hele XML tree uitpoepen?
Heeft iemand misschien een heel klein stukje code? Ik kan werkelijk niks vinden!

Acties:
  • 0 Henk 'm!

  • ArthurMorgan
  • Registratie: Januari 2001
  • Niet online
omegasearch => php xml

Ik zie hier best wel wat bruikbaars bij staan eigenlijk

I hear voices in my head, they counsel me, they understand.


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Je moet dat idd met echo's en while's in elkaar zetten.
Wat voor data wil je gaan versturen dan? Er zijn vast eenvoudige truukjes voor je structuur te vinden.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

gewoon echo-tjes en loopen idd.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Merk wel op dat het niet zo fraai is om XML te genereren met echos. Er zijn veel artikelen te vinden het web die verschillende aanpakken (echo, DOM opbouwen, SAX events bijvoorbeeld) vergelijken. Geen van alle technieken vind ik eigenlijk erg aantrekkelijk: in de toekomst zullen er nog zeker veel betere oplossingen komen. Op dit moment is het afvuren van SAX events naar een pretty printer die geimplementeerd is als een SAX ContentHandler naar mijn mening nog de beste oplossing. Ik heb over deze taktiek weleens wat geschreven hier op GoT.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Acties:
  • 0 Henk 'm!

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 10-09 11:45
De tabel die ik uit de db terugkrijg ziet er ongeveer zo uit:
code:
1
2
3
4
5
6
type_desc,sunroof_desc,price
 145,Stratos 100 beugel nu met Venusglas,275
 145,Onyx 750 handbediend,NULL
 145,Onyx 750 electrisch,NULL
 145,Stratos 300 Medium electrisch,606
 145,Stratos 300 Medium electrisch met nieuwe hemel,815


En daar moet ik dan weer zoeits van maken:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0"?>
<brand description="Alfa Romeo">
    <type type_id="145">
        <sunroof>
            <description>Stratos 100 beugel nu met Venusglas</description>
            <price>275</price>
        </sunroof>
        <sunroof>
            <description>Onyx 750 handbediend</description>
            <price>NULL</price>
        </sunroof>
        <sunroof>
            <description>Onyx 750 electrisch</description>
            <price>NULL</price>
        </sunroof>
        <sunroof>
            <description>Stratos 300 Medium electrisch</description>
            <price>606</price>
        </sunroof>
        <sunroof>
            <description>Stratos 300 Medium electrisch met nieuwe hemel</description>
            <price>815</price>
        </sunroof>
    </type>
</brand>


Maar goed. Ik dacht door XML te gebruiken het allemaal wat mooier voor elkaar te krijgen, maar als ik dan met al die echootjes en loopjes moet gaan werken ga ik wel weer gewoon kant en klare HTML uitpoepen. Scheelt me een hele hoop tijd.

Acties:
  • 0 Henk 'm!

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 09-09 09:55
Je kunt je gegenereerde XML er mooier uit laten zien door in je PHP code te beginnen met:
PHP:
1
header("Content-type: text/xml");


Hierdoor herkent de browser dat het om een XML document gaat.

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
mbravenboer schreef op 19 January 2003 @ 16:36:
Op dit moment is het afvuren van SAX events naar een pretty printer die geimplementeerd is als een SAX ContentHandler naar mijn mening nog de beste oplossing. Ik heb over deze taktiek weleens wat geschreven hier op GoT.
ik heb gezocht maar niet gevonden...

ben wel benieuwd wat je hier precies mee bedoeld? Ik ben nl. ook niet zo gecharmeerd van enerzijds het rommelen met echo's en anderzijds het geheugenslurpende en relatief slome gepruts met DOM-trees.

Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Genoil: ben wel benieuwd wat je hier precies mee bedoeld? Ik ben nl. ook niet zo gecharmeerd van enerzijds het rommelen met echo's en anderzijds het geheugenslurpende en relatief slome gepruts met DOM-trees.
SAX is een interface die door veel XML parsers gebruikt wordt om de content die wordt gelezen door te geven aan het programma die de XML parser gebruikt. SAX is event gebaseerd en bouwt geen volledige data structuur op die het XML document representeert.

Je kan de SAX ContentHandler echter ook de andere kant op gebruiken: doe net alsof je een XML parser bent en stuur dus content in de vorm van events naar de ContentHandler. Er zijn (althans voor Java) veel XML pretty printers die geimplementeerd zijn in de vorm van een ContentHandler en zo wordt er dus XML geproduceerd.

Voor meer info over SAX op GoT kan je bijvoorbeeld hier kijken:
[rml][ java] XML JAXP DOM SAX discussie/vragen[/rml] . Verder is er natuurlijk meer dan genoeg op het web te vinden. Ik heb specifiek over deze aanpak van XML generatie ook weleens wat gelezen, maar ik kan niet meer herrinneren waar ...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Ik neem aan dat je het wel zal snappen, maar dit poept wel een grappig stukke XML uit dacht ik zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Header("Content-type: text/xml");

echo "<Blaat>\r\n";

For ($i = 0; $i < 100; $i++)
{

  echo "<Item".$i.">\r\n";
  echo "<Title>".Rand(0,999)."</Title>\r\n";
  echo "<Content>".Rand(0,3)."</Content>\r\n";
  echo "</Item".$i.">\r\n";

}

echo "</Blaat>\r\n";
Pagina: 1