Scripts

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)

xml-class
<?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
Nog geen reacties.