Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] Met XML bestanden ontleden (https://forum.scholieren.com/showthread.php?t=1186418)

BarbapapaX 24-05-2005 14:33

[PHP] Met php xml bestanden ontleden
 
Ik heb een vraagje over xml . Ik heb het volgende voorbeeld van Wikipedia:
Code:

<?xml version="1.0" encoding="ISO-8859-1"?>
<playlist name="mylist">
 <song>
  <title>Little Fluffy Clouds</title>
  <artist>the Orb</artist>
 </song>
 <song>
  <title>Goodbye mother Earth</title>
  <artist>Underworld</artist>
 </song>
</playlist>

Mn vraag is nu hoe ik dit met php zou kunnen ontleden en dan zou kunnen gebruiken op een pagina.Klinkt allemaal een beetje vaag , maar ik hoop dat iemand me kan helpen. :)

SE 24-05-2005 14:45

load.xml.php
PHP-code:

<?php 
  
// indien lager dan php 5, dit uncommenten
  //  function file_get_contents($file) {
  //       $file = file($file);
  //      return !$file ? false : implode('', $file);
  //  }

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
   } 
}

en dit op je pagina zetten waar je m wilt hebben (vergeet de load.xml.php niet te includen)
PHP-code:

// xml script om menu in te laden.. $taal bepaald welke XML file.. 
  
$xml = new xml;
  
$layout '<li><a href=::::||burl||::::>::::||bname||::::</a>%smenu::::||nummer||::::%</li>'// menu op een rijtje zetten
  
$layout ''.$layout.''// even netjes in een ul zetten

  
  
$vervang = array("::::||nummer||::::","::::||bname||::::""::::||burl||::::"); // variabelen omzetten
  
$tags = array("bname_attr_nummer""bname""burl");  // kijken welke vars nodig zijn
  
$parse $xml->parse("inc/xml/menu_".$taal.".xml"$layout$vervang$tags"item");  // importeren, vervangen en printen 

en natuurlijk aanpassen naar je eigen wensen :p

het is niet mijn script, ik heb t ook ergens vandaan..
en k doe dus niet aan feedback of wijzigingen

BarbapapaX 24-05-2005 18:36

beetje onduidelijk zo :s

Manuzhai 24-05-2005 20:23

Citaat:

BarbapapaX schreef op 24-05-2005 @ 19:36 :
beetje onduidelijk zo :s
Hoeveel duidelijker had je het gehad willen hebben? Moet iemand meteen maar even je gedachten lezen en voor je schrijven wat je nodig hebt? Je mag er zelf ook best wat moeite voor doen, SE heeft al wat behoorlijk nuttige code gegeven.

SE 25-05-2005 10:43

Citaat:

Manuzhai schreef op 24-05-2005 @ 21:23 :
Hoeveel duidelijker had je het gehad willen hebben? Moet iemand meteen maar even je gedachten lezen en voor je schrijven wat je nodig hebt? Je mag er zelf ook best wat moeite voor doen, SE heeft al wat behoorlijk nuttige code gegeven.
T is dak op m'n werk zit en niet veel tijd hier aan kan besteden, anders had ik het denkik wel gedaan..

Ulfheðin 25-05-2005 10:54

Citaat:

SE schreef op 25-05-2005 @ 11:43 :
T is dak op m'n werk zit en niet veel tijd hier aan kan besteden, anders had ik het denkik wel gedaan..
Nuttigste reply _ooit_

BarbapapaX 25-05-2005 12:18

Citaat:

Manuzhai schreef op 24-05-2005 @ 21:23 :
Hoeveel duidelijker had je het gehad willen hebben? Moet iemand meteen maar even je gedachten lezen en voor je schrijven wat je nodig hebt? Je mag er zelf ook best wat moeite voor doen, SE heeft al wat behoorlijk nuttige code gegeven.
Wrom denk je dat ik het hier vraag? Omdat ik al zoveel moeite heb gedaan om op het internet hier wat over te vinden.

En in mn vraag gaat het duidelijk over het voorbeeld wat wordt gegeven. Mssn is dit easy voor jouw , maar voor mij wie pas begonnen is met dit soort dingen niet. Maarja een vriendelijke reactie van jouw had ik op dit forum ook niet moeten verw8en.

En... . Hij zegt zelf dat ie het wat duidelijker had kunnen geven
Citaat:

T is dak op m'n werk zit en niet veel tijd hier aan kan besteden, anders had ik het denkik wel gedaan..

BarbapapaX 25-05-2005 12:21

Citaat:

SE schreef op 25-05-2005 @ 11:43 :
T is dak op m'n werk zit en niet veel tijd hier aan kan besteden, anders had ik het denkik wel gedaan..
Iig bedankt voor de moeite :)


Alle tijden zijn GMT +1. Het is nu 11:19.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.