login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > XML en PHP > Simpele xml parser

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:
  1. <result>
  2. <row id="0">
  3. <id>16</id>
  4. <naam>janus</naam>
  5. <emailadres>janus@anus.nl</emailadres>
  6. <website>http://</website>
  7. <bericht>
  8. blablabla een berichje!!! ow wat leuk!
  9. </bericht>
  10. <datum>2004-10-03</datum>
  11. <tijd>23:06</tijd>
  12. </row>
  13. <!-- enzenzenz... -->
  14. <row id="1"></row>
  15. </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:
  1. <?php
  2.  
  3. /**
  4.  * functie: xml_read
  5.  * auteur: T. Jurcka <tim@fusionmedia.nl>
  6.  *
  7.  * Deze functie opend het opgegenven xml document
  8.  * en geeft een gestructureerde array terug.
  9.  * Array (
  10.  * [0] => Array (
  11.  * [id] => 16
  12.  * [naam] => foo
  13.  * [emailadres] => foo@bar.com
  14.  * [website] => http://www.example.com
  15.  * [bericht] => blablabla
  16.  * [datum] => 2004-10-03
  17.  * [tijd] => 23:06
  18.  * )
  19.  * [1] => Array ()...
  20.  * )
  21.  */
  22. function xml_read($xml) {
  23. if (!$data = implode('', file($xml))) {
  24. die('kan xml document niet vinden!');
  25. }
  26. $parser = xml_parser_create();
  27. $params = array();
  28. $level = array();
  29.  
  30. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  31. xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
  32. xml_parse_into_struct($parser, $data, $values, $index);
  33. xml_parser_free($parser);
  34.  
  35. foreach ($values as $element) {
  36. switch($element['type']) {
  37. case 'open' :
  38. if (array_key_exists('attributes', $element)) {
  39. list($level[$element['level']], $extra) = array_values($element['attributes']);
  40. }
  41. else { $level[$element['level']] = $element['tag']; }
  42. break;
  43.  
  44. case 'complete' :
  45. $start = 1;
  46. $exec = '$params';
  47. while($start < $element['level']) {
  48. $exec .= '[$level['.$start.']]';
  49. $start++;
  50. }
  51. $exec .= '[$element[\'tag\']] = $element[\'value\'];';
  52. eval($exec);
  53. break;
  54. }
  55. }
  56. return $params;
  57. }
  58.  
  59. /* gebruik: */
  60. $parsed = xml_read('./xmlfile/sql2xml.xml');
  61. $parsed = $parsed['result'];
  62. for ($i = 0; $i < count($parsed); $i++) {
  63. ?>
  64. <table class="gastenboek" width="60%" border="1" cellspacing="0" cellpadding="2">
  65. <tr>
  66. <td width="88%" valign="top">
  67. <b>Gepost door</b>: <?php echo $parsed[$i]['naam']; ?>
  68. <b>Gepost op</b>: <?php echo $parsed[$i]['datum']; ?> - <?php echo $parsed[$i]['tijd']; ?>
  69. </td>
  70. </tr>
  71. <tr>
  72. <td valign="top">
  73. <?php echo $parsed[$i]['bericht']; ?>
  74. <br><hr size="1" noshade>
  75.  
  76. [<a href="mailto:<?php echo $parsed[$i]['emailadres']; ?> ">E-mail</a>]
  77. </td>
  78. </tr>
  79. </table><br>
  80. <?php } ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (2)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.031s