Подскажите как развалить XML файл на массивы

12
A
На сайте с 09.01.2013
Offline
33
773

Господа, подскажите как развалить файл XML на массивы.

Чтобы получилось переменные такого типа: $mass['category-id'], $mass['price']

Вот сайт XML:

<?xml version="1.0" encoding="UTF-8"?>

<price-list version="1.0">
<settings><currency>BRB</currency></settings>
<items-list>
<item id="1">
<category-id>Вентиляторы</category-id>
<vendor-id>Scarlett</vendor-id>
<model-id>SC-1174</model-id>
<price>190000</price>
<availability>Спец</availability>
<warranty>12</warranty>
<delivery>Бесплатная</delivery>
<beznal>Да</beznal>
<credit>Нет</credit>
<comment>Наличие товара уточняйте у Менеджера. Большой выбор бытовой техники, техники для офиса и дома, товары для кухни, а также аудио и видео техники. Ежедневное обновление актуальных товаров и цен. Покупая товары у нас, вы приобретаете качественную технику для своего дома с гарантией и чеком. Бесплатная доставка в города: Минск. Подъем крупногабаритных товаров – платный.</comment>
</item>
<item id="2">
<category-id>Настольные плиты</category-id>
<vendor-id>GEFEST</vendor-id>
<model-id>ПГТ1</model-id>
<price>230000</price>
<availability>Спец</availability>
<warranty>24</warranty>
<delivery>Бесплатная</delivery>
<beznal>Да</beznal>
<credit>Нет</credit>
<comment>Наличие товара уточняйте у Менеджера. Большой выбор бытовой техники, техники для офиса и дома, товары для кухни, а также аудио и видео техники. Ежедневное обновление актуальных товаров и цен. Покупая товары у нас, вы приобретаете качественную технику для своего дома с гарантией и чеком. Бесплатная доставка в города: Минск. Подъем крупногабаритных товаров – платный.</comment>
</item>
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
A
На сайте с 09.01.2013
Offline
33
#2

В том то и дело, что получилось разбить, но переменные все $mass[0], т.е чтобы загнать в определенные столбцы БД, это не катит, а тем более через форму выбора загрузки полей.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#3
antyan:
В том то и дело, что получилось разбить, но переменные все $mass[0], т.е чтобы загнать в определенные столбцы БД, это не катит, а тем более через форму выбора загрузки полей.

Да ладно? :)

http://www.php.net/manual/ru/function.simplexml-load-file.php

A
На сайте с 09.01.2013
Offline
33
#4

LEOnidUKG, ну тогда получается, что я совсем дурак, раз не получается у меня (((

---------- Добавлено 18.07.2013 в 15:03 ----------

Получается вот такая штука, а что дальше то?



SimpleXMLElement Object
(
[@attributes] => Array
(
[version] => 1.0
)

[settings] => SimpleXMLElement Object
(
[currency] => BRB
)

[items-list] => SimpleXMLElement Object
(
[item] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 1
)

[category-id] => Вентиляторы
[vendor-id] => Scarlett
[model-id] => SC-1174
[price] => 190000
[availability] => Спец
[warranty] => 12
[delivery] => Бесплатная
[beznal] => Да
[credit] => Нет
[comment] => Наличие товара уточняйте у Менеджера. Большой выбор бытовой техники, техники для офиса и дома, товары для кухни, а также аудио и видео техники. Ежедневное обновление актуальных товаров и цен. Покупая товары у нас, вы приобретаете качественную технику для своего дома с гарантией и чеком. Бесплатная доставка в города: Минск. Подъем крупногабаритных товаров – платный.
)

[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 2
)

[category-id] => Настольные плиты
[vendor-id] => GEFEST
[model-id] => ПГТ1
[price] => 230000
[availability] => Спец
[warranty] => 24
[delivery] => Бесплатная
[beznal] => Да
[credit] => Нет
[comment] => Наличие товара уточняйте у Менеджера. Большой выбор бытовой техники, техники для офиса и дома, товары для кухни, а также аудио и видео техники. Ежедневное обновление актуальных товаров и цен. Покупая товары у нас, вы приобретаете качественную технику для своего дома с гарантией и чеком. Бесплатная доставка в города: Минск. Подъем крупногабаритных товаров – платный.
)

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#5

Ну если вы так не хотите перебирать в таком виде:

$xml->$items-list as $item

то если порыться можно такую функцию:

function xml_to_array($xml,$main_heading = '') {

$deXml = simplexml_load_string($xml);

$deJson = json_encode($deXml);

$xml_array = json_decode($deJson,TRUE);

if (! empty($main_heading)) {

$returned = $xml_array[$main_heading];

return $returned;

} else {

return $xml_array;

}

}

---------- Добавлено 18.07.2013 в 17:09 ----------

Возможно в документации не уж сильно показан пример. Может быть так поймёте:

<aaaa Version="1.0">

<bbb>

<cccc>

<dddd Id="id:pass" />

<eeee name="hearaman" age="24" />

</cccc>

</bbb>

</aaaa>

$xml = new SimpleXMLElement($xmlString);

echo $xml->bbb->cccc->dddd['Id'];

echo $xml->bbb->cccc->eeee['name'];

// or...........

foreach ($xml->bbb->cccc as $element) {

foreach($element as $key => $val) {

echo "{$key}: {$val}";

}

}

A
На сайте с 09.01.2013
Offline
33
#6

А как перебирать так,

$xml->$items-list as $item

если на синтаксис ругается?

И в примере получается, если echo $xml->items-list->item->dddd['Id'];

то не пропускает items-list из за дефиса

bay_ebook
На сайте с 28.05.2010
Offline
111
#7
antyan:
А как перебирать так,
$xml->$items-list as $item

если на синтаксис ругается?

И в примере получается, если echo $xml->items-list->item->dddd['Id'];

то не пропускает items-list из за дефиса

$xml = (array)$xml;

$xml['items-list']->item->dddd['Id'];

ну так, навскидку ,раз лень разбираться с объектами :)

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
A
На сайте с 09.01.2013
Offline
33
#8

А как такой массив на элементы разбить с ключами?

Код:


db = (array)$db;
foreach ($db as $xz)
{

print_r($xz);

}

Результат:


AminoAcid Object
(
[name] =>
[symbol] =>
 => 
[type] =>
[category-id] => Вентиляторы
[vendor-id] => Scarlett
[model-id] => SC-1174
[price] => 190000
[availability] => Спец
[warranty] => 12
[delivery] => Бесплатная
[beznal] => Да
[credit] => Нет
[comment] => Наличие товара уточняйте у Менеджера. Большой выбор бытовой техники, техники для офиса и дома, товары для кухни, а также аудио и видео техники. Ежедневное обновление актуальных товаров и цен. Покупая товары у нас, вы приобретаете качественную технику для своего дома с гарантией и чеком. Бесплатная доставка в города: Минск. Подъем крупногабаритных товаров – платный.
)

IL
На сайте с 20.04.2007
Offline
435
#9

print_r($xz->symbol);

что выдаст?

p.s. может букварь по php почитаете?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
A
На сайте с 09.01.2013
Offline
33
#10
ivan-lev:
print_r($xz->symbol);

что выдаст?
p.s. может букварь по php почитаете?

Ничего не выдаст, потому что пустое значение. То, что подсказал, спасибо.

---------- Добавлено 18.07.2013 в 18:03 ----------

А еще вопрос по синтаксису,

$xz->price - значение выводит

а если есть дефис, то ноль $xz->category-id

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий