Обработка xml в php

Тема в разделе "PHP", создана пользователем Juri, 28 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    Добрый день, столкнулся с таокй проблемой, ужно распарсить xml документ, как только не пробовал не получается.
    может есть готовое решение или привидите хотя бы маленький примерчик как распарсить это.

    пример xml кода вот

    Код:
    <?xml version="1.0" encoding="utf-8" ?><teztour><last_minute date="2009.05.28" time="11:23:46" timestamp="1243499026">
    <offer id="78">
    <reg_date>19.05 11:18</reg_date>
    <direction lang="ru">Крит</direction>
    <direction lang="lv">Krēta</direction>
    <country lang="ru">Греция</country>
    <country lang="lv">Grieķija</country>
    <category_code>EO</category_code>
    <category_name lang="ru">Express скидки</category_name>
    <category_name lang="lv">Express atlaides</category_name>
    <direction_code>HER</direction_code>
    <start_date>2009-05-19</start_date>
    <finish_date>2009-05-30</finish_date>
    <spo>6518</spo>
    <is_new>0</is_new>
    <url ext="xls" name="SPO_RIX.HER-6518_lv.xls">http://www.teztour.lv?l=1&amp;controller=file&amp;id=517</url>
    <description lang="ru">Express предложение на вылеты в июне, июле, августе.  </description>
    <description lang="lv">Express piedāvājums lidojumiem jūnijā, jūlijā, augustā.  </description>
    <price_from>207.00</price_from>
    <currency>LVL</currency>
    <takeoff lang="ru">июнь, июль, август</takeoff>
    <takeoff lang="lv">jūnijs, jūlijs, augusts</takeoff>
    <flights_from lang="ru">из Риги</flights_from>
    <flights_from lang="lv">no Rīgas</flights_from>
    <permalink>http://www.teztour.lv?l=1&amp;controller=specoffers&amp;view=78</permalink>
    </offer>
    <offer id="84">
    <reg_date>27.05 09:29</reg_date>
    <direction lang="ru">Анталия</direction>
    <direction lang="lv">Antalja</direction>
    <country lang="ru">Турция</country>
    <country lang="lv">Turcija</country>
    <category_code>LM</category_code>
    <category_name lang="ru">Горящее предложение</category_name>
    <category_name lang="lv">Pēdējā brīža cenas</category_name>
    <direction_code>AYT</direction_code>
    <start_date>2009-05-25</start_date>
    <finish_date>2009-06-16</finish_date>
    <spo>7525</spo>
    <is_new>0</is_new>
    <url ext="xls" name="LM_AYT_7525.xls">http://www.teztour.lv?l=1&amp;controller=file&amp;id=529</url>
    <img>http://www.teztour.lv/images/specialoffers/6284_f.jpg</img>
    <description lang="ru">Last minute предложение на рейсы 6, 9, 12, 13, 16 июня  </description>
    <description lang="lv">Last Minute piedāvājums lidojumiem 6., 9., 12., 13., 16. jūnijā.  </description>
    <price_from>222.00</price_from>
    <currency>LVL</currency>
    <takeoff lang="ru">06.06, 09.06, 12.06, 13.06, 16.06</takeoff>
    <takeoff lang="lv">06.06, 09.06, 12.06, 13.06, 16.06</takeoff>
    <flights_from lang="ru">из Риги</flights_from>
    <flights_from lang="lv">no Rīgas</flights_from>
    <permalink>http://www.teztour.lv?l=1&amp;controller=specoffers&amp;view=84</permalink>
    </offer>
    </last_minute>
    			</teztour>
    
    
    как вывести на страничке эту информацию?
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Какую информацию конкретно?
    А вообще в поиск по SImpleXML.
     
  3. EugeneVC

    EugeneVC

    Регистр.:
    28 окт 2007
    Сообщения:
    297
    Симпатии:
    83
    Для своих проектов я ипользую простой скриптик:
    http://keithdevens.com/software/phpxml
    превращает xml в php массив.
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Зачем?
    В PHP5 достаточно встроенных средств для обработки XML.
     
  5. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    нужно вот эти данные
    direction
    country
    category_name
    start_date
    finish_date
    url
    description
    price_from
    permalink

    можно хотя бы пару переменных вытащить, а остальное я по образцу
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Маны мы курить всё-таки не хотим :D

    Один из способов:
    PHP:
    <?php

    $xml 
    = <<<XML
    <?xml version="1.0" encoding="utf-8" ?><teztour><last_minute date="2009.05.28" time="11:23:46" timestamp="1243499026">
    <offer id="78">
    <reg_date>19.05 11:18</reg_date>
    <direction lang="ru">Крит</direction>
    <direction lang="lv">Krēta</direction>
    <country lang="ru">Греция</country>
    <country lang="lv">Grieķija</country>
    <category_code>EO</category_code>
    <category_name lang="ru">Express скидки</category_name>
    <category_name lang="lv">Express atlaides</category_name>
    <direction_code>HER</direction_code>
    <start_date>2009-05-19</start_date>
    <finish_date>2009-05-30</finish_date>
    <spo>6518</spo>
    <is_new>0</is_new>
    <url ext="xls" name="SPO_RIX.HER-6518_lv.xls">http://www.teztour.lv?l=1&amp;controller=file&amp;id=517</url>
    <description lang="ru">Express предложение на вылеты в июне, июле, августе.  </description>
    <description lang="lv">Express piedāvājums lidojumiem jūnijā, jūlijā, augustā.  </description>
    <price_from>207.00</price_from>
    <currency>LVL</currency>
    <takeoff lang="ru">июнь, июль, август</takeoff>
    <takeoff lang="lv">jūnijs, jūlijs, augusts</takeoff>
    <flights_from lang="ru">из Риги</flights_from>
    <flights_from lang="lv">no Rīgas</flights_from>
    <permalink>http://www.teztour.lv?l=1&amp;controller=specoffers&amp;view=78</permalink>
    </offer>
    <offer id="84">
    <reg_date>27.05 09:29</reg_date>
    <direction lang="ru">Анталия</direction>
    <direction lang="lv">Antalja</direction>
    <country lang="ru">Турция</country>
    <country lang="lv">Turcija</country>
    <category_code>LM</category_code>
    <category_name lang="ru">Горящее предложение</category_name>
    <category_name lang="lv">Pēdējā brīža cenas</category_name>
    <direction_code>AYT</direction_code>
    <start_date>2009-05-25</start_date>
    <finish_date>2009-06-16</finish_date>
    <spo>7525</spo>
    <is_new>0</is_new>
    <url ext="xls" name="LM_AYT_7525.xls">http://www.teztour.lv?l=1&amp;controller=file&amp;id=529</url>
    <img>http://www.teztour.lv/images/specialoffers/6284_f.jpg</img>
    <description lang="ru">Last minute предложение на рейсы 6, 9, 12, 13, 16 июня  </description>
    <description lang="lv">Last Minute piedāvājums lidojumiem 6., 9., 12., 13., 16. jūnijā.  </description>
    <price_from>222.00</price_from>
    <currency>LVL</currency>
    <takeoff lang="ru">06.06, 09.06, 12.06, 13.06, 16.06</takeoff>
    <takeoff lang="lv">06.06, 09.06, 12.06, 13.06, 16.06</takeoff>
    <flights_from lang="ru">из Риги</flights_from>
    <flights_from lang="lv">no Rīgas</flights_from>
    <permalink>http://www.teztour.lv?l=1&amp;controller=specoffers&amp;view=84</permalink>
    </offer>
    </last_minute>
                </teztour>
    XML;

    $xml = new SimpleXMLElement($xml);

    $result $xml->xpath('/teztour/last_minute/offer/description');
    print_r($result);

    $result $xml->xpath('/teztour/last_minute/offer/description[@lang="ru"]');
    print_r($result);

    $result $xml->xpath('/teztour/last_minute/offer/url');
    print_r($result);
     
  7. BlackPawn

    BlackPawn Постоялец

    Регистр.:
    19 мар 2009
    Сообщения:
    75
    Симпатии:
    27
    Если нужно просто вывести данные, то добавь в файл хml строчку
    HTML:
    
    <?xml-stylesheet type='text/xsl' href='example.xsl'?>
    
    сразу после тега xml и создай файл example.xsl с нужным форматированием
    HTML:
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template match="/">
    <HTML><HEAD><TITLE>test table</TITLE></HEAD>
    <BODY>
    	<TABLE border="1">
    		<xsl:for-each select="teztour/last_minute/offer">
    		<TR>
    			<TD><xsl:value-of select="direction" /></TD>
    			<TD><xsl:value-of select="country" /></TD>
    			<TD><xsl:value-of select="category_name" /></TD>
    			<TD><xsl:value-of select="start_date" /></TD>
    			<TD><xsl:value-of select="finish_date" /></TD>
    			<TD><xsl:value-of select="url" /></TD>
    			<TD><xsl:value-of select="description" /></TD>
    			<TD><xsl:value-of select="price_from" /></TD>
    			<TD><xsl:value-of select="permalink" /></TD>
    		</TR>
    		</xsl:for-each>
    	</TABLE>
    </BODY>
    </HTML>
    </xsl:template>
    </xsl:stylesheet>
    
     
  8. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Человек не может XML разобрать, куда ему до XSLT браться?
     
  9. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    я рад за вас, что вы настолько грамотны, я с xml никогда не сталкивался, так как не было необхадимости, поэтому сейчас и прошу помощи тут.

    а что касается ваего кода то вот ошибки

    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 4: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xCA 0xF0 0xE8 0xF2 in Z:\home\ci\www\index.php on line 60

    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: <direction lang="ru">����</direction> in Z:\home\ci\www\index.php on line 60

    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in Z:\home\ci\www\index.php on line 60

    Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in Z:\home\ci\www\index.php:60 Stack trace: #0 Z:\home\ci\www\index.php(60:( SimpleXMLElement->__construct('<?xml version="...') #1 {main} thrown in Z:\home\ci\www\index.php on line 60
     
  10. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    ни о чём не говорит?
     
    Juri нравится это.
Статус темы:
Закрыта.