За последние 24 часа нас посетили 22410 программистов и 1029 роботов. Сейчас ищут 709 программистов ...

Распарсить xml

Тема в разделе "PHP для новичков", создана пользователем Verbal, 25 авг 2016.

Метки:
  1. Verbal

    Verbal Активный пользователь

    С нами с:
    17 дек 2011
    Сообщения:
    207
    Симпатии:
    0
    Добрый день. вот часть кода из xml

    Код (Text):
    1. <item>
    2.     <title><![CDATA[SodaStream Orange Sirup 500ml]]></title>
    3.     <category>Haushalt &amp; Küche &gt; SodaStream &amp; Wassermaxx &gt; Sirup</category>
    4.     <g:sku>37760</g:sku>
    5.     <g:price>3.00 EUR</g:price>
    6.     <g:brand>SodaStream</g:brand>
    7.     <g:ean>7290002793335</g:ean>
    8.     <g:suppliernumber>1020103490</g:suppliernumber>
    9.     <g:mpn>1020103490</g:mpn>
    10.     <g:availability>&gt;10</g:availability>
    11.     <g:shipping>
    12.         <g:country>DE</g:country>
    13.         <g:service>DHL</g:service>
    14.         <g:price>4.19 EUR</g:price>
    15.     </g:shipping>
    16.     <g:Sped>
    17.           0
    18.         </g:Sped>
    19.     <g:catSort>
    20.     Haushalt &amp; Kueche &gt; SodaStream &amp; Wassermaxx &gt; Sirup
    21.     </g:catSort>
    22.     <g:EEK></g:EEK>
    23.     <g:shipptype></g:shipptype>
    24. </item>

    Вопрос как достать то, что находится в g:sku, g: price и т.д.. Категорию без проблем распарсивает
    SimpleXMLElement. Но эти значения теряются, потом их нет в массиве

    Вот так я привожу к массиву:

    PHP:
    1. $xml = new SimpleXMLElement(file_get_contents("site.ru/file.xml"));
    2. $json_xml = json_encode($xml);
    3. $product_xml = json_decode($json_xml,TRUE);
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    заголовок xml можно посмотреть? где неймспейсы описаны.
     
  3. Verbal

    Verbal Активный пользователь

    С нами с:
    17 дек 2011
    Сообщения:
    207
    Симпатии:
    0
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" ?>
    2.  
    3. <rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:atom="http://www.w3.org/2005/Atom">
    4. <channel>
    5.     <atom:link href="***" rel="self" type="application/rss+xml" />
    оно?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ну так весь код должен будет сводится к $xml->xpath('//g:sku');
    и совсем не надо извращений с кодированием-декодированием в JSON.
     
  5. Verbal

    Verbal Активный пользователь

    С нами с:
    17 дек 2011
    Сообщения:
    207
    Симпатии:
    0
    там не один item а много, у него ->xpath делать или сначала нужно сделать у всего xml и потом по ним как-то бежать?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    xpath умеет выбирать вложенные ноды. Документацию читал?