Php. Как работать с XML-файлами? Часть 1.


Работа с 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.

Более сложный пример, как циклично обработать содержимое ветки смотрите в продолжении статьи.

,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *