Witam!
Może komuś przyda się parserek XML, który wynik dowolnego zapytania SQL transformuje do XML'a na potrzebe Ajax:
<?php
class XMLParser
{
private $dbm;
private $result;
private $tname;
/**
* Funkcja query - wysyla zapytanie do parsowania
*
* @param string $query zapytanie sql
* @param string $tname nazwa pierwszej galezi
*/
public function query(string $query,string $tname='table')
{
//wykozystanie prostej klasy dostepu do bazy
$this->dbm=new database();
$this->dbm->query($query);
$this->result = new DOMDocument();
$this->tname=$tname;
}
/**
* Funckja zwraca string xml
*
* @return string drzewo xml
*/
public function getXML()
{
//nazwa korzenia to 'response'
$root=$this->result->createElement('response');
$this->result->appendChild($root);
//nazwa pierwszej galezi to $tname
$table=$this->result->createElement($this->tname);
$root->appendChild($table);
while($row=$this->dbm->get_row())
{
//druga galaz bedzie nazwana 'i'.$tname [jakby instancja $tname]
$resp=$this->result->createElement('i'.$this->tname);
$table->appendChild($resp);
//$this->dbm->query_id to wynik zapytania sql ($result)
{
$element=$this->result->createElement(mysql_field_name($this->dbm->query_id, $i)); $resp->appendChild($element);
if(''!=$row[$i])
{
$text=$this->result->createTextNode($row[$i]);
$element->appendChild($text);
}
}
}
return $this->result->saveXML();
}
}
?>
Klasa wykozystuje prosta klase dostepu do bazy/roznych baz w zasadzie ale jest dosc prosta i nie wymaga wiekszego zaglebiania. Przykład użycia:
<?
header ('Content-Type: text/xml; charset=utf-8'); header('Cache-Control: no-cache, must-revalidate');
//plik z ustawieniami i 'includami'
require_once("include/config.php");
//tylko na potrzeby kodowania
$dbm=new database();
$dbm->query('SET NAMES utf8');
$xml=new XMLParser();
$xml->query('select * from news','news');
?>
Pozdrawiam
Piotr
Ten post edytował teutates 25.06.2007, 15:50:09