Hallo,
verwöhnt von PHP5's simplexml ärgere ich mich heute mit einer Lösung für PHP4 herum. Es geht um eine äußerst einfach gestrickte XML-Datei:
<?xml version="1.0" encoding="utf-8"?>
Nun kommt zwar ein Array heraus, aber mit sämtlichen unnützen Keys:
Hier nur mal der Anfang:
Folglich ist [0] sowie ['data'] (nicht aber ['DATA']) in jedem Fall überflüssig auf Grund der XML-Struktur.
Könnt Ihr mir bitte helfen, gleich zu verhindern, dass diese Unterteilung stattfindet.? Habe schon den ganzen Abend herumgebastelt und leider geht es danach meist nicht mehr
Danke für Eure Hilfe
verwöhnt von PHP5's simplexml ärgere ich mich heute mit einer Lösung für PHP4 herum. Es geht um eine äußerst einfach gestrickte XML-Datei:
<?xml version="1.0" encoding="utf-8"?>
Und was ich mir bisher zusammengeschnipselt habe, funktioniert sogar auch; jedoch gefällt mir das Ergebnis nicht so ganz:<myapi>
<data>
<d0>
<title>foo bla</title>
<description>bar bla</description>
</d0>
<d1>
<title>foo1</title>
<description>bar1 blub</description>
</d1>
</data>
<qid>xyz</qid>
</myapi>
PHP:
<?
$sxml=new XMLParser('test.xml');
$sxml->parse('
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<myapi>
<data>
<d0>
<title>foo bla</title>
<description>bar bla</description>
</d0>
<d1>
<title>foo1</title>
<description>bar1 blub</description>
</d1>
</data>
<qid>xyz</qid>
</myapi>
');
print_r($sxml->document);
?>
<?
class XMLParser
{
var $parser;
var $filePath;
var $document;
var $currTag;
var $tagStack;
function XMLParser($path)
{
$this->parser = xml_parser_create();
$this->filePath = $path;
$this->document = array();
$this->currTag =& $this->document;
$this->tagStack = array();
}
function parse()
{
xml_set_object($this->parser, $this);
xml_set_character_data_handler($this->parser, 'dataHandler');
xml_set_element_handler($this->parser, 'startHandler', 'endHandler');
if(!($fp = fopen($this->filePath, "r")))
{
die("Cannot open XML data file: $this->filePath");
return false;
}
while($data = fread($fp, 4096))
{
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)));
}
}
fclose($fp);
xml_parser_free($this->parser);
return true;
}
function startHandler($parser, $name, $attribs)
{
if(!isset($this->currTag[$name]))
$this->currTag[$name] = array();
$newTag = array();
if(!empty($attribs))
$newTag['attr'] = $attribs;
array_push($this->currTag[$name], $newTag);
$t =& $this->currTag[$name];
$this->currTag =& $t[count($t)-1];
array_push($this->tagStack, $name);
}
function dataHandler($parser, $data)
{
$data = trim($data);
if(!empty($data))
{
if(isset($this->currTag['data']))
$this->currTag['data'] .= $data;
else
$this->currTag['data'] = $data;
}
}
function endHandler($parser, $name)
{
$this->currTag =& $this->document;
array_pop($this->tagStack);
for($i = 0; $i < count($this->tagStack); $i++)
{
$t =& $this->currTag[$this->tagStack[$i]];
$this->currTag =& $t[count($t)-1];
}
}
}
?>
Nun kommt zwar ein Array heraus, aber mit sämtlichen unnützen Keys:
Hier nur mal der Anfang:
Code:
Array
(
[MYAPI] => Array
(
[0] => Array
(
[DATA] => Array
(
[0] => Array
(
[D0] => Array
(
[0] => Array
(
[TITLE] => Array
(
[0] => Array
(
[data] => foo bla
)
)
[DESCRIPTION] => Array
(
[0] => Array
(
[data] => bar bla
)
)
)
)
....
Könnt Ihr mir bitte helfen, gleich zu verhindern, dass diese Unterteilung stattfindet.? Habe schon den ganzen Abend herumgebastelt und leider geht es danach meist nicht mehr
Danke für Eure Hilfe