Witam!

Może komuś przyda się parserek XML, który wynik dowolnego zapytania SQL transformuje do XML'a na potrzebe Ajax:

  1. <?php
  2. class XMLParser 
  3. {
  4. private $dbm;
  5. private $result;
  6. private $tname;
  7.  
  8. /**
  9.  * Funkcja query - wysyla zapytanie do parsowania
  10.  *
  11.  * @param string $query zapytanie sql
  12.  * @param string $tname nazwa pierwszej galezi 
  13.  */
  14.  
  15.  
  16. public function query(string $query,string $tname='table')
  17. {
  18. //wykozystanie prostej klasy dostepu do bazy
  19. $this->dbm=new database();
  20. $this->dbm->query($query);
  21. $this->result = new DOMDocument();
  22. $this->tname=$tname;
  23. }
  24.  
  25. /**
  26.  * Funckja zwraca string xml
  27.  *
  28.  * @return string drzewo xml
  29.  */
  30. public function getXML()
  31. {
  32.  
  33. //nazwa korzenia to 'response'
  34. $root=$this->result->createElement('response');
  35. $this->result->appendChild($root);
  36.  
  37. //nazwa pierwszej galezi to $tname
  38. $table=$this->result->createElement($this->tname);
  39. $root->appendChild($table);
  40.  
  41. while($row=$this->dbm->get_row())
  42. {
  43.  
  44. //druga galaz bedzie nazwana 'i'.$tname [jakby instancja $tname]
  45. $resp=$this->result->createElement('i'.$this->tname);
  46. $table->appendChild($resp);
  47.  
  48. //$this->dbm->query_id to wynik zapytania sql ($result)
  49. for($i=0;$i<=mysql_num_fields($this->dbm->query_id)-1;$i++)
  50. {
  51.  
  52. $element=$this->result->createElement(mysql_field_name($this->dbm->query_id, $i));
  53. $resp->appendChild($element);
  54.  
  55. if(''!=$row[$i])
  56. {
  57. $text=$this->result->createTextNode($row[$i]);
  58. $element->appendChild($text);
  59. }
  60. }
  61.  
  62. }
  63. return $this->result->saveXML();
  64. }
  65.  
  66. }
  67.  
  68.  
  69.  
  70. ?>



Klasa wykozystuje prosta klase dostepu do bazy/roznych baz w zasadzie ale jest dosc prosta i nie wymaga wiekszego zaglebiania. Przykład użycia:

  1. <?
  2. header ('Content-Type: text/xml; charset=utf-8');
  3. header('Cache-Control: no-cache, must-revalidate');
  4.  
  5. //plik z ustawieniami i 'includami'
  6. require_once("include/config.php");
  7.  
  8. //tylko na potrzeby kodowania
  9. $dbm=new database();
  10. $dbm->query('SET NAMES utf8');
  11.  
  12. $xml=new XMLParser();
  13. $xml->query('select * from news','news');
  14. echo $xml->getXML();
  15.  
  16. ?>


Pozdrawiam

Piotr