Simpele xml parser
Auteur: DRUNK - 03 oktober 2004 - 23:49 - Gekeurd door: Dennisvb - Hits: 24003 - Aantal punten: 5.00 (1 stem)
Een erg eenvoudige xml parser, deze is geschreven voor het gebruik bij xml2sql ( http://sitemast...amp;id=296 ) maar je kan er natuurlijk ook andere xml documenten mee verwerken. Nadeel is dat het document wel aan de onderstaande opmaak moet voldoen anders gaat het niet helemaal goed:
<result>
<row id="0">
<id>16</id>
<naam>janus</naam>
<emailadres>janus@anus.nl</emailadres>
<website>http://</website>
<bericht>
blablabla een berichje!!! ow wat leuk!
</bericht>
<datum>2004-10-03</datum>
<tijd>23:06</tijd>
</row>
<!-- enzenzenz... -->
<row id="1"></row>
</result>
<result> <row id="0"> <id>16</id> <naam>janus</naam> <emailadres>janus@anus.nl</emailadres> <website>http://</website> <bericht> blablabla een berichje!!! ow wat leuk! </bericht> <datum>2004-10-03</datum> <tijd>23:06</tijd> </row> <!-- enzenzenz... --> <row id="1"></row> </result>
De namen van de elementen doen er niet zo toe maar het gaat om het id in <row>, dit id word een index in de array, dus als je die niet opgeeft werkt het gewoon niet. Binnenkort zal ik wel een oplossing vinden, als iemand er een oplossing voor heeft hoor ik het graag. Ik weet dat er veel betere parsers te vinden zijn maar zo ver ben ik nog niet. Denk ook niet dat veel mensen ze hier snappen dus begin ik lekker simpel, zodat iedereen er wat van kan leren. Dit is voor mij ook de 1e keer dat ik iets doe met php/xml doe, dus als ik iets fout doe hoor ik het graag.
groeten Tim
|
Code: |
<?php
/**
* functie: xml_read
* auteur: T. Jurcka <tim@fusionmedia.nl>
*
* Deze functie opend het opgegenven xml document
* en geeft een gestructureerde array terug.
* Array (
* [0] => Array (
* [id] => 16
* [naam] => foo
* [emailadres] => foo@bar.com
* [website] => http://www.example.com
* [bericht] => blablabla
* [datum] => 2004-10-03
* [tijd] => 23:06
* )
* [1] => Array ()...
* )
*/
function xml_read($xml) {
if (!$data = implode('', file($xml))) {
die('kan xml document niet vinden!');
}
$parser = xml_parser_create();
$params = array();
$level = array();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $index);
xml_parser_free($parser);
foreach ($values as $element) {
switch($element['type']) {
case 'open' :
if (array_key_exists('attributes', $element)) {
list($level[$element['level']], $extra) = array_values($element['attributes']);
}
else { $level[$element['level']] = $element['tag']; }
break;
case 'complete' :
$start = 1;
$exec = '$params';
while($start < $element['level']) {
$exec .= '[$level['.$start.']]';
$start++;
}
$exec .= '[$element[\'tag\']] = $element[\'value\'];';
eval($exec);
break;
}
}
return $params;
}
/* gebruik: */
$parsed = xml_read('./xmlfile/sql2xml.xml');
$parsed = $parsed['result'];
for ($i = 0; $i < count($parsed); $i++) {
?>
<table class="gastenboek" width="60%" border="1" cellspacing="0" cellpadding="2">
<tr>
<td width="88%" valign="top">
<b>Gepost door</b>: <?php echo $parsed[$i]['naam']; ?>
<b>Gepost op</b>: <?php echo $parsed[$i]['datum']; ?> - <?php echo $parsed[$i]['tijd']; ?>
</td>
</tr>
<tr>
<td valign="top">
<?php echo $parsed[$i]['bericht']; ?>
<br><hr size="1" noshade>
[<a href="mailto:<?php echo $parsed[$i]['emailadres']; ?> ">E-mail</a>]
</td>
</tr>
</table><br>
<?php } ?>
<?php /** * functie: xml_read * auteur: T. Jurcka <tim@fusionmedia.nl> * * Deze functie opend het opgegenven xml document * en geeft een gestructureerde array terug. * Array ( * [0] => Array ( * [id] => 16 * [naam] => foo * [emailadres] => foo@bar.com * [website] => http://www.example.com * [bericht] => blablabla * [datum] => 2004-10-03 * [tijd] => 23:06 * ) * [1] => Array ()... * ) */ function xml_read($xml) { die('kan xml document niet vinden!'); } foreach ($values as $element) { switch($element['type']) { case 'open' : } else { $level[$element['level']] = $element['tag']; } break; case 'complete' : $start = 1; $exec = '$params'; while($start < $element['level']) { $exec .= '[$level['.$start.']]'; $start++; } $exec .= '[$element[\'tag\']] = $element[\'value\'];'; break; } } return $params; } /* gebruik: */ $parsed = xml_read('./xmlfile/sql2xml.xml'); $parsed = $parsed['result']; for ($i = 0; $i < count($parsed); $i++) { ?> <table class="gastenboek" width="60%" border="1" cellspacing="0" cellpadding="2"> <tr> <td width="88%" valign="top"> <b>Gepost door</b>: <?php echo $parsed[$i]['naam']; ?> <b>Gepost op</b>: <?php echo $parsed[$i]['datum']; ?> - <?php echo $parsed[$i]['tijd']; ?> </td> </tr> <tr> <td valign="top"> <?php echo $parsed[$i]['bericht']; ?> <br><hr size="1" noshade> [<a href="mailto: <?php echo $parsed[$i]['emailadres']; ?> ">E-mail</a>] </td> </tr> </table><br> <?php } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|