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