Парсинг xml со значением id

Тема в разделе "Как сделать...", создана пользователем parks, 18 ноя 2012.

  1. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Здравствуйте !
    С парсингом столкнулся впервые , второй день муюсь как вывести содержание в теге по id. Перековырял кучу инфы ,но ничего так и не добился, либо пустая страница, либо ошибки.
    Вкратце:
    Есть xml с данными кинотеатров http://kino-teatr.ua/ru/main/bill_export.phtml
    Нжно спрасить и вывести:
    Хотябы по одному кинотеатру, к примеру (cinema_id="223" )

    Цены, время, фильмы
    <show id="162253" film_id="5710" cinema_id="223" hall_id="419">
    выдергнуть film_id=
    и затем както сам фильм ,высмысле инфу
    <film id="5710">
    Зарание спасибо.Принимается любая помощь.:thenks:
     
  2. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    По этому принципу вытаскивать данные
    PHP:
    <?php
    $xml 
    simplexml_load_file('http://kino-teatr.ua/ru/main/bill_export.phtml');
    foreach(
    $xml->shows as $shows)
        {
          foreach(
    $shows->show as $show)
          {
            echo 
    "Начало: ".$show->begin." Конец: ".$show->end."<br>";
          }
        }
     
    ?>
     
    parks нравится это.
  3. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Спасибо, а как условие поставить cinema_id="223" ?
     
  4. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    PHP:
    $string file_get_contents('http://kino-teatr.ua/ru/main/bill_export.phtml');
    preg_match_all("/<show(.*?)>/",$string,$out);
    echo 
    "<pre>";
    print_r($out);
    echo 
    "</pre>";
     
    // Дальше по идее распаршиваешь $out[1][n]
    // и таким образом как написано ниже выдираешь все нужные значения..
    // можно в preg_match_all написать регулярку которая сразу будет выдать только id
    Я как бы сам то не сталкивался с таким но думаю что тут прийдется делать вот таким способом. Просто если ты знаешь что ты хочешь увидеть на выходе - то прийдется анализировать структуру документа + можно файл сохранять сразу, чтобы 2 раза не скачивать.
     
    parks нравится это.
  5. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Фаил сохранять буду локально на каждый день, а вот с выводом прийдётся мучатся.На выходе хочу вывести всё по одному городу. Кинотеатры =>Фыльмы=>Сеансы, но вопрос остаётся открытым

    Непойму почему скрины невыводит ?
    PHP:
    $xml simplexml_load_file('http://kino-teatr.ua/ru/main/bill_export.phtml');
    foreach(
    $xml->films as $films)
        {
          foreach(
    $films->film as $film)
          {
            echo 
    "Название: ".$film->title."<br>";
            echo 
    "Год: ".$film->year."<br>";
            echo 
    "Рейтинг: ".$film->rating."<br>";
            echo 
    "Описание: ".$film->intro."<br>";
            foreach(
    $films->photos as $photos)
                {   
                echo 
    "<img".$photos->photo.  "alt='Скрин'>";
                }
           
            echo 
    "<HR>";
          }
        }
    PHP:
     $xmlstr file_get_contents('http://kino-teatr.ua/ru/main/bill_export.phtml');
    $x = new SimpleXMLElement($xmlstr); // код вашей xml-ки
    var_dump($x->xpath("//film[@id=120]"));
    echo 
    "Title: ".$film->title;
    Почему выводит только Title:, и пустота .....?
     
  6. awx

    awx Создатель

    Регистр.:
    7 апр 2009
    Сообщения:
    43
    Симпатии:
    4
    Потому что надо вызывать функцию которая помещена в переменную:
    PHP:
      $xmlstr file_get_contents('http://kino-teatr.ua/ru/main/bill_export.phtml');
    $x = new SimpleXMLElement($xmlstr); // код вашей xml-ки
    $film=$x->xpath("//film[@id=120]");
    echo 
    "Title: ".$film[0]->title
     
    parks нравится это.
  7. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Спасибо большое , за ответ.
    Подскажите а как вывести скрины , а то этот foreach скоро сума сведёт.
    HTML:
    <films>
                        <film id="120">
                    <title orig="101 Dalmatians">101 долматинец</title>
                    <duration>0</duration>
                    <year>1996</year>
                    <age_limit>0</age_limit>
                    <budget currency="usd">0</budget>
                    <intro><![CDATA[Круэлла Де Вит владеет богатой коллекцией мехов. Они являются ее страстью, и заставляют совершать ужасные поступки, например, убийство. Ее коварный план близок к осуществлению. .]]></intro>
                    <text><![CDATA[]]></text>
                    <rating votes="9">7.22222</rating>
                    <pro_rating votes="0">0</pro_rating>
                    <photos>
                                                <photo src="http://kino-teatr.ua/public/main/films/photo_498f906a3b1e4.jpg"/>
                                                <photo src="http://kino-teatr.ua/public/main/films/photo_498f906a9d09b.jpg"/>
                                                
     
  8. awx

    awx Создатель

    Регистр.:
    7 апр 2009
    Сообщения:
    43
    Симпатии:
    4
    PHP:
    $xmlstr file_get_contents('http://kino-teatr.ua/ru/main/bill_export.phtml');
    $x = new SimpleXMLElement($xmlstr); // код вашей xml-ки
    $film=$x->xpath("//film[@id=120]");
    foreach(
    $film[0]->photos->photo as $k){
        
    $obj=current($k);
        echo 
    $obj['src']."\n";
    }
     
    parks нравится это.