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

Статус
В этой теме нельзя размещать новые ответы.
  • Автор темы
  • Заблокирован
  • #11
туканю, только вот массиивы какие то кривоватые получаются
 
В смысле? 10 чёртовых букв.
 
Magic Parser

А как насчёт Magic Parser.
Демка Для просмотра ссылки Войди или Зарегистрируйся
Если кому надо могу выложить сам скрипт MagicParser.php
 
Вот где-то взял парсер чуть поправил и получился массив
PHP:
<?
  $debug = 1;
  $container = 'teztour';
  $tags = array('direction','country','category_name','start_date','finish_date','url','description','price_from','permalink');
$xml_file_in = <<<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;
function xml_parser($xml,$container,$tags,$number,$cdata) {
  $stories=0;
  //$xml=$xml_file_in;//file_get_contents($page);
  preg_match_all("/<$container>.+<\/$container>/sU",$xml, $items);
  $items      = $items[0];
  $itemsArray = array();
  foreach ($items as $item) {
    for($i=0; $i<count($tags); $i++) {
      preg_match("/<$tags[$i](.+)(<\/$tags[$i]>)/sU", $item, $tag);
      $this[$i]=preg_replace("/<$tags[$i]>(.+)(<\/$tags[$i]>)/sU",'$1',$tag);
      };
    array_push($itemsArray, $this);
    }
  $theData['1']  = $itemsArray[0][0][0];
  $theData['2']  = $itemsArray[0][1][0];
  $theData['3']  = $itemsArray[0][2][0];
  $theData['4']  = $itemsArray[0][3][0];
  $theData['5']  = $itemsArray[0][4][0];
  return $theData;
  };//end function xml_parser($page,$container,$tags,$number,$cdata)

$res_array = xml_parser($xml_file_in,$container,$tags,1,'');
   echo "<br><br><pre>\r\n";
   print_r($res_array);
   echo "</pre>\r\n";
?>
РЕЗУЛЬТАТ:
PHP:
Array
(
    [1] => Крит
    [2] => Греция
    [3] => Express скидки
    [4] => 2009-05-19
    [5] => 2009-05-30
)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху