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

Статус
В этой теме нельзя размещать новые ответы.

Juri

Мой дом здесь!
Заблокирован
Регистрация
5 Окт 2007
Сообщения
1.064
Реакции
200
  • Автор темы
  • Заблокирован
  • #1
Добрый день, столкнулся с таокй проблемой, ужно распарсить 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>

как вывести на страничке эту информацию?
 
Какую информацию конкретно?
А вообще в поиск по SImpleXML.
 
Для своих проектов я ипользую простой скриптик:

превращает xml в php массив.
 
Зачем?
В PHP5 достаточно встроенных средств для обработки XML.
 
  • Автор темы
  • Заблокирован
  • #5
нужно вот эти данные
direction
country
category_name
start_date
finish_date
url
description
price_from
permalink

можно хотя бы пару переменных вытащить, а остальное я по образцу
 
Маны мы курить всё-таки не хотим :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);
 
Если нужно просто вывести данные, то добавь в файл х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>
 
Человек не может XML разобрать, куда ему до XSLT браться?
 
  • Автор темы
  • Заблокирован
  • #9
Человек не может XML разобрать, куда ему до XSLT браться?

я рад за вас, что вы настолько грамотны, я с 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
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху