Парсер гороскопа от Igion.com из xml

Тема в разделе "PHP", создана пользователем FORMAT, 25 июн 2009.

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

    FORMAT

    Регистр.:
    9 май 2008
    Сообщения:
    210
    Симпатии:
    45
    Приветствую. В php начинаю разбираться, думал справлюсь с задачей, но, увы , не вышло... Советовали попробовать SimpleXML.
    Необходимо парсить данные гороскопа в XML. Помогите наваять парсер, например для этого файла:
    http://img.ignio.com/r/daily/index.xml
    Спасибо за помощь
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Мда, для таких вопросов есть раздел для начинающих.

    PHP:
    <?php

    $horo 
    simplexml_load_string(file_get_contents('http://img.ignio.com/r/daily/index.xml'));

    echo 
    'Гороскоп для Рака:';
    echo 
    '<hr />Вчера: '$horo->aries->yesterday;
    echo 
    '<hr />Сегодня: '$horo->aries->today;
    echo 
    '<hr />Завтра: '$horo->aries->tomorrow;
    echo 
    '<hr />Послезавтра: '$horo->aries->tomorrow02;
     
    4ksner нравится это.
  3. designf

    designf Постоялец

    Регистр.:
    24 май 2009
    Сообщения:
    104
    Симпатии:
    16
    А как поправить код, чтобы к кирилице 1251 все приводил, а то не верно отображает.

    Разобрался.
     
  4. Makc79

    Makc79 Прохожие

    Господа офицеры! :)

    Не могли бы Вы продублировать данный PHP_MASTER'ом код для PHP4 , так как функция simplexml_load_string не пашет, а запарсировать оч надо.

    Спасибо.

    ЗЫ обновить php до php5 на моём хостинге невозможно.
     
  5. sanya_kst

    sanya_kst Прохожие

    Не подскажешь как, ато у меня эта проблема уже не впервой, много чего перепробывал не помогает
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    регулярными выражениями
     
  7. noisiaman

    noisiaman Создатель

    Регистр.:
    16 дек 2009
    Сообщения:
    17
    Симпатии:
    0
    http://by.php.net/manual/en/function.iconv.php

    Добавлено через 3 минуты
    PHP:
    function xml2array($xml) {
            
    $xmlary = array();
                   
            
    $reels '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
            
    $reattrs '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';

            
    preg_match_all($reels$xml$elements);

            foreach (
    $elements[1] as $ie => $xx) {
                    
    $xmlary[$ie]["name"] = $elements[1][$ie];
                   
                    if (
    $attributes trim($elements[2][$ie])) {
                            
    preg_match_all($reattrs$attributes$att);
                            foreach (
    $att[1] as $ia => $xx)
                                    
    $xmlary[$ie]["attributes"][$att[1][$ia]] = $att[2][$ia];
                    }

                    
    $cdend strpos($elements[3][$ie], "<");
                    if (
    $cdend 0) {
                            
    $xmlary[$ie]["text"] = substr($elements[3][$ie], 0$cdend 1);
                    }

                    if (
    preg_match($reels$elements[3][$ie]))
                            
    $xmlary[$ie]["elements"] = xml2array($elements[3][$ie]);
                    else if (
    $elements[3][$ie]) {
                            
    $xmlary[$ie]["text"] = $elements[3][$ie];
                    }
            }

            return 
    $xmlary;
    }
    PHP:
    function xml2array($originalXML$attributes=true)
    {
            
    $xmlArray = array();
            
    $search $attributes '|<((\S+)(.*))\s*>(.*)</\2>|Ums' '|<((\S+)()).*>(.*)</\2>|Ums';
           
            
    // normalize data
            
    $xml preg_replace('|>\s*<|'">\n<"$originalXML); // one tag per line
            
    $xml preg_replace('|<\?.*\?>|'''$xml);            // remove XML declarations
            
    $xml preg_replace('|<(\S+?)(.*)/>|U''<$1$2></$1>'$xml); //Expand singletons
           
            
    if (! preg_match_all($search$xml$xmlMatches))
                    return 
    trim($originalXML);      // bail out - no XML found
                   
            
    foreach ($xmlMatches[1] as $index => $key)
            {
                    if (! isset(
    $xmlArray[$key])) $xmlArray[$key] = array();       
                    
    $xmlArray[$key][] = xml2array($xmlMatches[4][$index], $attributes);
            }
            return 
    $xmlArray;
    }
     
Статус темы:
Закрыта.