XML Streams und PHP
XML Dateien mit PHP Parsen
XML-Feed in folgendem Format:
<feed>
<product>
<name>Joghurt</name>
<url>http://example.com/joghurt/</url>
<price>0.99</price>
</Product>
<Product>
<name>Milch</name>
<url>http://example.com/milch/</url>
<price>0.69</price>
</product>
<feed>
--
Feed mit PHP parsen und in Form von Objekten in
Array zur Verfügung stellen:
<?php
class Product {
var $name;
var $url;
var $price;
function Product ($p)
{
foreach ($p as $k=>$v)
$this->$k = $p[$k];
}
}
function readDatabase($filename)
{
//read the XML database of products
$data = implode('', file($filename));
$parser = xml_parser_create("ISO-8859-1");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $tags);
xml_parser_free($parser);
//loop through structures
foreach ($tags as $key=> $value) {
if ($key == "product") {
$productranges = $value;
for ($i=0; $i < count($productranges); $i+=2) {
$offset = $productranges[$i] + 1;
$len = $productranges[$i + 1] - $offset;
$tdb[] = parseProduct(array_slice($values, $offset, $len));
}
} else {
continue;
}
}
return $tdb;
}
function parseProduct($pvalues)
{
for ($k=0; $k < count($pvalues); $k++) {
if ( isset($pvalues[$k]['value']) ) {
$prod[$pvalues[$k]['tag']] = $pvalues[$k]['value'];
}
}
return new Product($prod);
}
$file = 'example.xml';
$filep = fopen($file, "r");
$fp = stream_get_contents($filep);
$db = readDatabase($file);
echo $db[0]->name; // Joghurt
echo $db[0]->price; // 0.99
echo $db[0]->url; // http://example.com/joghurt
echo $db[1]->name; // Milch
echo $db[1]->price; // 0.69
echo $db[1]->url; // http://example.com/milch
?>
--
Quelle: http://de2.php.net/manual/de/function.xml-parse-into-struct.php

