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--;
}
}
}
?>
283 views