rashn
Новичок
XML разбор - подскажите
Есть файл из таких оферов:
--------------------------------------------
<offer id="153">
<url>http://belm.ru/catalogue/item/153.html</url>
<price>5900.00</price>
<currencyId>RUR</currencyId>
<categoryId>240</categoryId>
<statusId>1</statusId>
<images>
<image id="180" small="http://belm.ru/shops/img/small/180.jpg" big="http://belm.ru/shops/img/big/180.jpg" />
</images>
<charactersList>
<characterItem id="1">15х12.5см h16.5см</characterItem>
<characterItem id="4">Италия</characterItem>
<characterItem id="5">ST 801 B/ SP</characterItem>
<characterItem id="6">(покрытие серебро 925)</characterItem>
<characterItem id="8">0.8</characterItem>
</charactersList>
<name>Богиня удачи с дельфинами (на базе)</name>
<description>Богиня удачи с дельфинами (на базе)</description>
</offer>
-----------------------------------------
Используя вот эту функцию:
--------------------------------------------------
class AminoAcid {
var $name; // aa name
// var $symbol; // three letter symbol
// var $code; // one letter code
// var $type; // hydrophobic, charged or neutral
function AminoAcid ($aa)
{
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}
function readDatabase($filename)
{
// read the XML database of aminoacids
$data = implode("", file($filename));
$parser = xml_parser_create();
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 the structures
foreach ($tags as $key=>$val) {
if ($key == "offer") {
$molranges = $val;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
for ($i=0; $i < count($molranges); $i+=2) {
$offset = $molranges[$i] + 1;
$len = $molranges[$i + 1] - $offset;
$tdb[] = parseMol(array_slice($values, $offset, $len));
}
} else {
continue;
}
}
return $tdb;
}
function parseMol($mvalues)
{
for ($i=0; $i < count($mvalues); $i++) {
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
}
return new AminoAcid($mol);
}
$db = readDatabase("xml.html");
echo "Offers:\n";
print_r($db);
----------------------------------
Получаю такие результаты:
[0] => AminoAcid Object
(
[name] => Богиня удачи с дельфинами (на базе)
=> [url]http://belm.ru/catalogue/item/153.html
[price] => 5900.00
[currencyId] => RUR
[categoryId] => 240
[statusId] => 1
[images] =>
[image] =>
[charactersList] =>
[characterItem] => 0.8
[description] => Богиня удачи с дельфинами (на базе)
)
Все бы ничего, но вот незадача - "съедаются" поля characterItem (выводится последнее) и image (вообще не выводятся аттрибуты)
Поможите люди добрые подправить скрипт, чтобы он вытаскивал в массив и эти поля.
Есть файл из таких оферов:
--------------------------------------------
<offer id="153">
<url>http://belm.ru/catalogue/item/153.html</url>
<price>5900.00</price>
<currencyId>RUR</currencyId>
<categoryId>240</categoryId>
<statusId>1</statusId>
<images>
<image id="180" small="http://belm.ru/shops/img/small/180.jpg" big="http://belm.ru/shops/img/big/180.jpg" />
</images>
<charactersList>
<characterItem id="1">15х12.5см h16.5см</characterItem>
<characterItem id="4">Италия</characterItem>
<characterItem id="5">ST 801 B/ SP</characterItem>
<characterItem id="6">(покрытие серебро 925)</characterItem>
<characterItem id="8">0.8</characterItem>
</charactersList>
<name>Богиня удачи с дельфинами (на базе)</name>
<description>Богиня удачи с дельфинами (на базе)</description>
</offer>
-----------------------------------------
Используя вот эту функцию:
--------------------------------------------------
class AminoAcid {
var $name; // aa name
// var $symbol; // three letter symbol
// var $code; // one letter code
// var $type; // hydrophobic, charged or neutral
function AminoAcid ($aa)
{
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}
function readDatabase($filename)
{
// read the XML database of aminoacids
$data = implode("", file($filename));
$parser = xml_parser_create();
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 the structures
foreach ($tags as $key=>$val) {
if ($key == "offer") {
$molranges = $val;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
for ($i=0; $i < count($molranges); $i+=2) {
$offset = $molranges[$i] + 1;
$len = $molranges[$i + 1] - $offset;
$tdb[] = parseMol(array_slice($values, $offset, $len));
}
} else {
continue;
}
}
return $tdb;
}
function parseMol($mvalues)
{
for ($i=0; $i < count($mvalues); $i++) {
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
}
return new AminoAcid($mol);
}
$db = readDatabase("xml.html");
echo "Offers:\n";
print_r($db);
----------------------------------
Получаю такие результаты:
[0] => AminoAcid Object
(
[name] => Богиня удачи с дельфинами (на базе)
=> [url]http://belm.ru/catalogue/item/153.html
[price] => 5900.00
[currencyId] => RUR
[categoryId] => 240
[statusId] => 1
[images] =>
[image] =>
[charactersList] =>
[characterItem] => 0.8
[description] => Богиня удачи с дельфинами (на базе)
)
Все бы ничего, но вот незадача - "съедаются" поля characterItem (выводится последнее) и image (вообще не выводятся аттрибуты)
Поможите люди добрые подправить скрипт, чтобы он вытаскивал в массив и эти поля.