Работа с XML — частая и привычная задача, которая никогда не должна вызывать затруднения. Разве что не более 5 минут, чтобы найти доку с примерами и освежить все в памяти.
Вариант подобной статьи хочу предложить, т.к. буквально пару часов назад писал парсер прайса для своего магазина интимны товаров.
Итак, удобнее всего работать с XML при помощи встроенной библиотеки SimpleXML.
Итак, пример файла на базе которого будем строить все примеры:
Store title Company name http://some_store.ua Категория 1 Категория 2 http://some_store.ua/page.html 350 UAH 2 http://some_store.ua/images/photo1.jpg false Название товара 1 Описание товара 1 http://some_store.ua/page.html 710.6 UAH 2 http://some_store.ua/images/photo2.jpg false Еще один товар Описание товара №1
Надеюсь со структурой и синтаксисом XML Вам все понятно и я на этом останавливаться не буду.
Для работы с XML я использую одну из двух функций — simplexml_load_file или simplexml_load_string.
Как понятно из названия — первой нужно указать путь к файлу, второй нужно дать содержимое в текстовом представлении.
Посмотрим, что будет в объекте, после использования одной из указанных функций:
'; print_r( $xml ); echo ''; ?>Результат ниже:
SimpleXMLElement Object ( [@attributes] => Array ( [date] => 2016-07-10 17:19 ) [shop] => SimpleXMLElement Object ( [name] => Store title [company] => Company name [url] => http://some_store.ua [currencies] => SimpleXMLElement Object ( [currency] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => UAH [rate] => 1 ) ) ) [categories] => SimpleXMLElement Object ( [category] => Array ( [0] => Категория 1 [1] => Категория 2 ) ) [offers] => SimpleXMLElement Object ( [offer] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 [available] => true ) [url] => http://some_store.ua/page.html [price] => 350 [currencyId] => UAH [categoryId] => 2 [picture] => http://some_store.ua/images/photo1.jpg [delivery] => false [name] => Название товара 1 [description] => Описание товара 1 ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 2 [available] => true ) [url] => http://some_store.ua/page.html [price] => 710.6 [currencyId] => UAH [categoryId] => 2 [picture] => http://some_store.ua/images/photo2.jpg [delivery] => false [name] => Еще один товар [description] => Описание товара №1 ) ) ) ) )Как видите, в случае правильной разметки вся структура переносится в объект, работа с которым сводится к элементарному использованию возможностей языка.
Каждая ветка являет собой объект, к свойствам которого можно обращаться:
echo $xml->shop->name ;В результате мы увидим желаемое название
Store title.Более сложный пример, как циклично обработать содержимое ветки смотрите в продолжении статьи.