СКРИПТ: Разбор объявлений из YML файлов

Подача, публикация, рассылка объявлений на доски. Удаление и редактирование старых объявлений. Нюансы работы с различными досками объявлений.
Ответить
Аватара пользователя
XwebDeveloper
Сообщения: 51
Зарегистрирован: 13 ноя 2017, 12:53

СКРИПТ: Разбор объявлений из YML файлов

Сообщение XwebDeveloper » 25 фев 2020, 15:48

Разбор YML файлов аналогичен разбору объявлений из XML. Но в этом примере покажем как работать с элементами разной вложенности в XML дереве.

YML файл:
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2019-11-01 17:22">
    <shop>
        <name>BestSeller</name>
        <company>Tne Best inc.</company>
        <url>http://best.seller.ru</url>
        <currencies>
            <currency id="RUR" rate="1"/>
            <currency id="USD" rate="60"/>
        </currencies>
        <categories>
            <category id="1">Бытовая техника</category>
            <category id="10" parentId="1">Мелкая техника для кухни</category>
        </categories>
        <delivery-options>
            <option cost="200" days="1"/>
        </delivery-options>
        <offers>
            <offer id="9012">
                <name>Мороженица Brand 3811</name>
                <url>http://best.seller.ru/product_page.asp?pid=12345</url>
                <price>8990</price>
                <currencyId>RUR</currencyId>
                <categoryId>10</categoryId>
                <delivery>true</delivery>
                <delivery-options>
                    <option cost="300" days="1" order-before="18"/>
                </delivery-options>
                <param name="Цвет">белый</param>
                <weight>3.6</weight>
                <dimensions>20.1/20.551/22.5</dimensions>
                </offer>
        </offers>
        <gifts>
            <!-- подарки не из прайс‑листа -->
        </gifts>
        <promos>
            <!-- промоакции -->
        </promos>
    </shop>
</yml_catalog>
Это стандартный пример от Яндекса.

Теперь код разбора:
// папка с объявлениями
$xml_file="data//ads.yml";

// считываем страницу с xml данными
$page_xml = file_get_contents($xml_file); 

// создаем xml документ
$ads = new SimpleXMLElement($page_xml);

echo "Название магазина: ".$ads->shop->name."<br>";
echo "company: ".$ads->shop->company."<br>";
echo "Сайт: ".$ads->shop->url."<br>";
echo "Валюта магазина: ".$ads->shop->currencies->currency['id']."<br>";
//print_r($ads->shop);
// считываем данные
foreach($ads->shop->offers as $data)
{
	//print_r($data);
	echo "ID товара: ".$data->offer['id']."<br>";
	echo "Название: ".$data->offer->name."<br>";
	echo "Страница товара: ".$data->offer->url."<br>";
	echo "Цена: ".$data->offer->price."<br>";
	echo "Валюта: ".$data->offer->currencyId."<br>";
	echo "categoryId: ".$data->offer->categoryId."<br>";
    echo "Цена доставки: ".$data->offer->{"delivery-options"}->option['cost']."<br>";
}
Из примера можно увидеть что разбор атрибутов тэгов делается таким образом:
/* xml 
<yml_catalog date="2019-11-01 17:22">
    <shop>
        <currencies>
            <currency id="RUR" rate="1"/> 
*/
/*php код*/
$ads->shop->currencies->currency['id']
$ads->shop->currencies->currency['rate']
если значение тэга содержит дефис тогда код будет:
/* xml
<offers>
            <offer id="9012">
                <delivery-options>
                    <option cost="300" days="1" order-before="18"/>
                </delivery-options>
*/
/*php код*/
 echo "Цена доставки: ".$data->offer->{"delivery-options"}->option['cost']."<br>";
Запрос на создание скриптов viewforum.php?f=61

Ответить