PHP XML Generation 12,726 views

Quick and easy way to generate an xml feed from a database and read them back into an array.

 1<?php 2function &last(&$array) { 3if (!count($array)) return null; 4end($array); 5return $array[key($array)]; 6} 7 8function myParseXML(&$vals, &$dom, &$lev) { 9   do {10       $curr = current($vals);11       $lev = $curr['level'];12       switch ($curr['type']) {13           case 'open':14               if (isset($dom[$curr['tag']])) {15                   $tmp = $dom[$curr['tag']];16                   if (!$tmp['__multi'])17                       $dom[$curr['tag']] = array('__multi' => true, $tmp);18                   array_push($dom[$curr['tag']], array());19                   $new =& last($dom[$curr['tag']]);20               } else {21                   $dom[$curr['tag']] = array();22                   $new =& $dom[$curr['tag']];23               }24               next($vals);25               myParseXML(&$vals, $new, $lev);26               break;27           case 'cdata':28               break;29           case 'complete':30               if (!isset($dom[$curr['tag']]))31                   $dom[$curr['tag']] = $curr['value'];32               else {33                   if (is_array($dom[$curr['tag']]))34                       array_push($dom[$curr['tag']] , $curr['value']);35                   else36                       array_push($dom[$curr['tag']] = array($dom[$curr['tag']]) , $curr['value']);37               }38               break;39           case 'close':40               return;41       }42   }43   while (next($vals)!==FALSE);44}4546function MyXMLtoArray($XML) {47       $xml_parser = xml_parser_create();48       xml_parse_into_struct($xml_parser, $XML, $vals);49       xml_parser_free($xml_parser);50       reset($vals);51       $dom = array(); $lev = 0;52       myParseXML($vals, $dom, $lev);53       return $dom;54}5556function mysql2xml($sql, $dblink) {57  $counter = 0;58  unset($fields);5960  $output = "<?phpxml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";61  $output .= "<coredata>\n";6263  $res = mysqli_query($dblink, $sql);6465  for ($i=0; $i<mysqli_num_fields($res); $i++)66    $fields[] = mysqli_field_name($res, $i);6768  while ($myr = mysqli_fetch_array($res)) {69    $counter++;7071    $output .= "  <entry$counter>\n";7273    for ($i=0; $i<count($fields); $i++) {74      $field = $fields[$i];75      $data = $myr[$field];7677      $output .= "    <$field>$data</$field>\n";78    }7980    $output .= "  </entry$counter>\n";81  }8283  $output .= "</coredata>\n";8485  return $output;86}