Hello,

Ik moet een xml bestand parsen. Ik heb hiervoor een xmlparser class ter mijner beschikking, maar ik weet niet hoe ik deze ten volle moet laten werken? Ik heb ook een xml bestand dat is vanop een externe server ophaal.... Wat moet ik doen om de gegevens uit de xml via deze class op te halen? Kan iemand me hierbij helpen? Alvast bedankt!!

<?php

class XMLparser {

var $x2a_array;
var $x2a_depth = 1;
var $x2a_element_count;

var $a2x_xml_string;
var $a2x_depth;

function open_element_handler($parser, $element_name, $attributes) {
$this->tag_count++;
$this->x2a_array[$this->x2a_depth] = &$this->x2a_array[$this->x2a_depth -1]['data'][];
$this->x2a_array[$this->x2a_depth]['element_name'] = $element_name;
$attributes and $this->x2a_array[$this->x2a_depth]['attributes'] = $attributes;
$this->x2a_depth++;
}

function close_element_handler($parser, $element_name) {
$this->x2a_depth--;
unset($this->x2a_array[$this->x2a_depth]);
}

function character_data_handler($parser, $data) {
trim($data) != '' and $this->x2a_array[$this->x2a_depth -1]['data'] .= $data;
}

function default_handler($parser, $data) {
if( trim($data) ) {
preg_match_all('/ (\w+=".+")/U', $data, $matches);
foreach($matches[1] as $match) {
list($attribute_name, $attribute_value) = (explode('=',$match));
$attribute_value = str_replace('"','',$attribute_value);
$this->x2a_array[0]['attributes'][$attribute_name] = $attribute_value;
}
}
}

function xml2array($file) {
$this->parser = xml_parser_create();

xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, 'open_element_handler', 'close_element_handler');
xml_set_character_data_handler($this->parser, 'character_data_handler');
xml_set_default_handler($this->parser, 'default_handler');
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, FALSE);

$fp = fopen($file, 'br');
if (!$fp) {
echo "<p>Unable to open remote file.\n";
echo "<br><br><br><br><br><br><br><br><br>\n";
bottom_of_page();
exit;
}


while ($data = fread($fp, 4096)) {
//$data = str_replace("\r", "", str_replace("\n", "", "$data"));
if (!xml_parse($this->parser, $data, feof($fp))) {
die(sprintf('XML error: %s at line %d', xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)));
}
}

xml_parser_free($this->parser);

//print_r($this->x2a_array);
return $this->x2a_array;
}

function make_attribute_string($attributes) {
if(is_array($attributes)) {
foreach($attributes as $attribute_name => $attribute_value) {
$attribute_string .= ' '.$attribute_name.'="'.$attribute_value.'"';
}
}
return $attribute_string;
}

function array2xml($array) {
$this->a2x_xml_string = '<?xml'.$this->make_attribute_string($array[0]['attributes']).' ?>'."\n";
$this->xml_output($array[0]['data']);
return $this->a2x_xml_string;
}

function xml_output($sub_array) {
foreach($sub_array as $element) {
$no_data_flag = $element['data'] == '' ? TRUE : FALSE; #Leeres Element? z.B.: <x id="2" />
$only_cdata_flag = !is_array($element['data']);
$this->a2x_depth++;
$this->a2x_xml_string.= str_repeat("\t", $this->a2x_depth -1);

$this->a2x_xml_string.= '<'.$element['element_name'].$this->make_attribute_string($element['attributes']).( $no_data_flag ? ' /' : '' ).'>'.($only_cdata_flag ? '' : "\n").( $no_data_flag ? "\n" : '' );
$only_cdata_flag and $this->a2x_xml_string .= $element['data'];
if(is_array($element['data'])) {
$this->xml_output($element['data']);
}
if(!$no_data_flag) {
$only_cdata_flag or $this->a2x_xml_string.= str_repeat("\t", $this->a2x_depth -1);
$this->a2x_xml_string .= '</'.$element['element_name'].'>'."\n";
}
$this->a2x_depth--;
}
}
}
?>

als je php5 draait kan je ook gebruik maken van SimpleXMLElement linkje
poeh wat een lap (mijn inziens overbodige code). als je de beschikking hebt over PHP5+ dan zou ik eens hier naar kijken:

http://php.net/simplexml

rik: :D
@rik en @IH8
The SimpleXML extension provides a very simple and easily usable toolset to convert XML to an object that can be processed with normal property selectors and array iterators.

dat zoekt hij dus niet
@terence

dat heb ik door. maar aangezien hij volgens mij toch geen kaas van die gepostte code heeft gegeten (denk ik) lijkt het me beter dat je er dan wat bijpakt wat handiger te begrijpen is. en daar draait 't toch om? anders staat deze topic in het verkeerde forum ;)
lolz.. had nog niet zijn hele post gelezen.

maargoed, dan is simplexml het beste als je de inhoud van een xml bestand moet laten zien.

voorbeeldje:
<?php
$xmlstr = file_get_contents('http://www.nieuwnieuws.nl/index.xml';);

$xml = new SimpleXMLElement($xmlstr);
if(!$xml->channel->item[0)]->title )
{
echo 'Artikel niet gevonden.';
}
else
{
echo $xml->channel->item[0]->title.'<br />';
echo $xml->channel->item[0]->description.'<br />';
echo $xml->channel->item[0]->guid;
}
?>
Probeer dit te snappen en kijk ook in het xml bestand.
$xml = simplexml_load_file('http://www.nieuwnieuws.nl/index.xml');


is nog mooier :)
Bedankt voor jullie reply's, maar op de server draait nog php 4.3
Ik had toch graag dat script dat ik gepost heb gebruikt... Maar ik weet niet juist hoe ik deze class moet aanspreken.... Hoe laad ik een externe xml file via deze class?
4.3?

andere hoster nemen of zelf de php naar iig 5 upgraden als het je eigen bak is.
Mja, dat heb ik geprobeerd.... Maar wij hebben nog enkele oudere site's die met typo3 draaien.... En dit gaf enorme problemen....


dus je laat je server kut omdat de sites ook kut zijn

Reageren