Помогите разобраться с парсингом XML файла

L
На сайте с 17.05.2013
Offline
88
743

Есть файл с такой структурой:

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

<xml_catalog>

<magaz>

<name>MagazName</name>

<url>http://www.magaz.com/</url>

<categories>

<category id="1">Main 1</category>

<category id="2" parentId="1">Sub 1_1</category>

<category id="3" parentId="1">Sub 1_2</category>

<category id="4" parentId="1">Sub 1_N</category>

<category id="5">Main 2</category>

<category id="6" parentId="5">Sub 2_1</category>

<category id="7" parentId="5">Sub 2_2</category>

<category id="8" parentId="5">Sub 2_N</category>

</categories>

<goods>

<dood>

<good id="1">

<name>Джинсы</name>

<photos>

<photo id="10">84.jpeg</photo>

<photo id="11">94.jpeg</photo>

</photos>

<param name="color">Черные</param>

<param name="brand">GUCCI</param>

</dood>

................

<dood>

<good id="2">

<name>Джинсы2</name>

<photos>

<photo id="12">184.jpeg</photo>

<photo id="13">194.jpeg</photo>

</photos>

<param name="color">Черные</param>

<param name="brand">GUCCI</param>

</dood>

</goods>

</magaz>

</xml_catalog>

Подскажите как пробежаться циклом по категориям и товарам, а также по вложенным данным(фото и тег param), получив значения атрибутов если они есть и узлов

Пробовал с пом. DOM по этому примеру ( http://myrusakov.ru/php-parsing-xml.html ) , но что-то

при таком коде:

$root = $dom->documentElement; // Получаем корневой элемент

$magaz= $root->childNodes;
echo $magaz->length;

У меня показывает число 3. Тоесть 3 дочерних елемента?? Хотя их вроде бы как должно быть 4(name, url, categories u goods)

Что-то я запутался. Помогите пожалуйста разобраться

R
На сайте с 18.12.2009
Offline
92
#1

simplexml_load_file как вариант

Z
На сайте с 25.06.2014
Offline
24
#2

Воспользуйся XPath и PHP5 SimpleXML API. Почитай эту статью http://www.ibm.com/developerworks/ru/library/x-xpathphp/ думаю она тебе будет полезной.

L
На сайте с 17.05.2013
Offline
88
#3

$xml = simplexml_load_file("xml.xml");

$shop = $xml->xpath("/xml_catalog/magaz/categories");

Вот так у меня в массиве список всех категорий ( Sub 1_1 ...).

А как получить массив с айди категорий (там где Id и parentId )

siv1987
На сайте с 02.04.2009
Offline
427
#4

foreach($shop as $cat){

echo (string) $cat['id'];

echo (string) $cat['parentId'];

}

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