XML - class
de class zit redelijk simpel in elkaar: door middel van 1 functie kan je heel je xml-bestand in een layout gieten. hoe het te gebruiken: je begint met de class in je bestand te includen: dan heb je 5 attributen in de functie: (even uitleggen bij een voorbeeldje:) dit is een xml bestand dat xmltest heet: jaja ?id=2 blablavladqsfqsdf qsdfdsq qsdf ?id=2 test qfddsqf ZER QSGFSD G ?id=3 testtest ?id=4 het eerste atribuut is een string met de bestand-url in dan heb je de layout, hier zitten kernwoorden in. bv: dan heb je een array met de kernwoorden, in dit geval: dan heb je een array met de tags in die de kernwoorden vervangen: --> hierin is de tekst_attr_nummer een attribuut van de tag tekst. het zit zo in elkaar: tagnaam_attr_attribuutnaam en dan het laatste atribuut: dit is de hoofdtag, waar alle gegevens inzitten, in dit geval item. je past de functie dan als volgt toe: ziezo dit was het, hopelijk heb je er iets aan ps uiteindelijk krijg je zoiets als output: #1 jaja (lees meer) ----------------- #2 blablavladqsfqsdf qsdfdsq qsdf (lees meer) --------------- #3 test qfddsqf ZER QSGFSD G (lees meer) -------------- #4 testtest (lees meer)
<?php
# Filename : xml.class.php
# Author : VeeWee
# Projectname : XML class
# Projectversion : 1.0
# Releasedate : 03/02/2005
class xml{
//variabelen
// om de output in te onthouden
var $out = "";
var $temp = array();
//om de huidige plaats te kennen
var $inside = false;
var $huidige_tag = "";
var $huidige_atr = "";
//ingegeven door de gebruiker
var $hoofdag = "";
var $layout = "";
var $vervang = "";
var $tags = "";
######
#deze functie parsed een bestand
######
function parse($bestand, $layout, $vervang, $tags, $hoofdtag){
//alle andere buiten bestand en layout in de class schrijven
$this->hoofdtag = $hoofdtag;
$this->layout = $layout;
$this->vervang = $vervang;
$this->tags = $tags;
//parser maken en hem in deze class laten werken
$xml_parser = xml_parser_create();
xml_set_object($xml_parser, &$this);
//functies om alles juist te laten weergeven
xml_set_element_handler($xml_parser, "begin", "einde");
xml_set_character_data_handler($xml_parser, "data");
//het bestand parsen:
$op = file_get_contents($bestand) or die("Het bestand kon niet gevonden worden");
$ret = xml_parse($xml_parser, $op) or die($this->fout($bestand, $xml_parser));
//alles legen
xml_parser_free($xml_parser);
return $this->out;
}
######
#deze functie geeft het begin van een element en de atributen weer
######
function begin($parser, $tag, $attributen){
if(strtolower($tag) == strtolower($this->hoofdtag)){
$this->inside = true;
//array aanmaken:
$this->maak_array();
} else {
$this->huidige_tag = strtolower($tag);
}
//zien of er attributen moeten toegevoeg worden:
reset($this->temp);
foreach($this->temp as $key => $waarde){
//veld_attr_attribuutwaarde
foreach($attributen as $key2 => $waarde2){
$poging = strtolower($tag)."_attr_".strtolower($key2);
if($key == $poging){
$this->temp[$poging] = $waarde2;
}
//de eerste word raar genoeg niet meegenomen dus resetten we het gewoon
if(!isset($eerste)){
reset($attributen);
$eerste = true;
}
}
reset($attributen);
}
reset($this->temp);
unset($eerste);
}
######
#deze functie verwerkt de data die tussen begin en eindtag staan
######
function data($parser, $data){
if($this->temp[$this->huidige_tag] == ""){
$this->temp[$this->huidige_tag] = $data;
}
}
######
#deze functie geeft het einde van een functie (soort van output gebeurt hier ook)
######
function einde($parser, $tag){
if(strtolower($tag) == strtolower($this->hoofdtag)){
$this->inside = false;
$this->layout();
}
$this->huidige_tag = "";
}
######
#geeft de errors weer
######
function fout($bestand, $xml_parser){
$out = 'lijn: '.xml_get_current_line_number($xml_parser).'<br>
string: '.xml_error_string($xml_parser).'<br>
code: '.xml_get_error_code($xml_parser).'<br>
bestand: '.$bestand.'<br>';
return $out;
}
########
#maakt de temporary array aan met als oproep de tagnaam
########
function maak_array(){
//leegmaken:
unset($this->temp);
$this->temp = array();
//vullen
$tags = $this->tags;
if(is_array($tags)){
foreach($tags as $nummer => $tagnaam){
$this->temp[$tagnaam] = "";
}
reset($tags);
}
}
#######
#plaats alles mooi in de layout
#######
function layout(){
$layout = $this->layout;
$temp = $this->temp;
foreach($this->tags as $nummer => $tagnaam){
if(count($this->vervang) == count($this->tags)){
$layout = str_replace($this->vervang[$nummer], $temp[$tagnaam], $layout);
} else {
die("U hebt niet evenveel vervangingen als tagnamen opgegeven!");
}
}
reset($this->tags);
//out neerschrijven
$this->out .= $layout;
}
}
?>
Reacties
0