XML-læsning i PHP
Hejsa,Jeg har oprettet et spørgsmål under PHP, men det burde måske have været her, så nu prøver vi:
Jeg har en xml_parser, der er lavet ved hjælp af følgende klasse jeg har fundet:
<?php
function xml2array($xml)
{
$file = $xml;
global $stack;
$stack = array();
$data = array();
$xml_parser = xml_parser_create('ISO-8859-1');
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "cdata");
$data = xml_parse($xml_parser,file_get_contents($file));
if(!$data)
die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
xml_parser_free($xml_parser);
if ($stack[0][name] != "ERROR")
return $stack;
else
return false;
}
// FUNKTIONER TIL AT LÆSE XML-FILEN IND I ET ARRAY
function startTag($parser, $name, $attrs)
{
global $stack;
$tag = array("name"=>$name, "attrs"=>$attrs);
array_push($stack,$tag);
}
function cdata($parser, $cdata)
{
global $stack,$i;
if(trim($cdata))
{
$stack[count($stack)-1]['cdata'] = $cdata;
}
}
function endTag($parser, $name)
{
global $stack;
$stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
array_pop($stack);
}
?>
Den virker fint på de felste XML-ark. Men f.eks. følgende XML-ark:
http://borsen.dk/newsfeed/rss/
Virker den ikke ordentligt på. Det er som om de skærer noget at dataen væk i Cdata ved æ ø eller å.
Jeg har prøvet at ændre ISO-8859-1 til UTF-8 osv, men den vil simpelthen ikke parse den ordentligt.