Oke, hier komt het: Een paar dagen wat door te hebben gelezen over XML besloot ik zelf ook maar eens wat te gaan maken. Mijn idee was om te beginnen met een simpel gastenboek met PHP/XML. Ik wil dus een simpele structuur met de data in een XML-file. Ik heb gekozen voor de volgende xml file:
guestbook.xml:
Guestbook.dtd:
Dan gebruik ik de volgende code om te parsen(php):
Allemaal mooi en aardig, en ik krijg het volgende als output:
Id: 324
Username: Willy Spruijt
Useremail: willy@p4n.nl
Subject: Dit is het onderwerp
Message: Dit is het bericht
Id: 326
Username: Kabouter Plop
Useremail: kabouter@plop.nl
Subject: Onderwerpje
Message: Dit is het bericht met xml te creeeren
Tot nu toe allemaal goed. Als ik wil kan ik hier mooi een gastenboekje van maken. Het wegschrijven van de xml is op zich ook geen probleem. Maar nu het probleem: Ik wil dat het laatste bericht bovenaan in het gastenboek komt. Ik dacht dit te kunnen doen met een aantal arrays, zoals subject, message. Dan kan ik de id als index voor de array nemen, en zo goed sorteren. Maar dit lukt dus niet. Ik krijg de waardes niet goed in een array
Iemand een idee hoe je data uit een xml bestand in een array krijgt?
guestbook.xml:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE TurboTracker SYSTEM "guestbook.dtd">
<guestbook>
<posting>
<id>324</id>
<username>Willy Spruijt</username>
<useremail>willy@p4n.nl</useremail>
<subject>Dit is het onderwerp</subject>
<message>Dit is het bericht</message>
</posting>
<posting>
<id>326</id>
<username>Kabouter Plop</username>
<useremail>kabouter@plop.nl</useremail>
<subject>Onderwerpje</subject>
<message>Dit is het bericht met xml te creeeren</message>
</posting>
</guestbook> |
Guestbook.dtd:
code:
1
2
3
4
5
6
7
| <!ELEMENT guestbook (posting+)> <!ELEMENT posting (id, username, useremail, subject, message)> <!ELEMENT id (#PCDATA)> <!ELEMENT username (#PCDATA)> <!ELEMENT useremail (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT message (#PCDATA)> |
Dan gebruik ik de volgende code om te parsen(php):
code:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| <?php
$file = "guestbook.xml";
// Call this at the beginning of every element
function startElement($parser, $name, $attrs) {
if (($name != "GUESTBOOK") and ($name != "POSTING"))
{
$name = strtolower($name);
$name = ucfirst($name);
print "$name: ";
}
}
// Call this at the end of every element
function endElement($parser, $name) {
print "\n";
}
// Call this whenever there is character data
function characterData($parser, $value) {
$value = trim($value);
if ($value != "")
{
print "$value<BR>";
}
}
// Define the parser
$simpleparser = xml_parser_create();
xml_set_element_handler($simpleparser, "startElement", "endElement");
xml_set_character_data_handler($simpleparser, "characterData");
// Open the XML file for reading
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
// Parse it
while($data = fread($fp, filesize($file))) {
if (!xml_parse($simpleparser, $data, feof($fp))) {
die(xml_error_string(xml_get_error_code($simpleparser)));
}
}
// Free memory
xml_parser_free($simpleparser);
?> |
Allemaal mooi en aardig, en ik krijg het volgende als output:
Id: 324
Username: Willy Spruijt
Useremail: willy@p4n.nl
Subject: Dit is het onderwerp
Message: Dit is het bericht
Id: 326
Username: Kabouter Plop
Useremail: kabouter@plop.nl
Subject: Onderwerpje
Message: Dit is het bericht met xml te creeeren
Tot nu toe allemaal goed. Als ik wil kan ik hier mooi een gastenboekje van maken. Het wegschrijven van de xml is op zich ook geen probleem. Maar nu het probleem: Ik wil dat het laatste bericht bovenaan in het gastenboek komt. Ik dacht dit te kunnen doen met een aantal arrays, zoals subject, message. Dan kan ik de id als index voor de array nemen, en zo goed sorteren. Maar dit lukt dus niet. Ik krijg de waardes niet goed in een array