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

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

FORMAT

Профессор
Регистрация
9 Май 2008
Сообщения
210
Реакции
45
Приветствую. В php начинаю разбираться, думал справлюсь с задачей, но, увы , не вышло... Советовали попробовать SimpleXML.
Необходимо парсить данные гороскопа в XML. Помогите наваять парсер, например для этого файла:
Для просмотра ссылки Войди или Зарегистрируйся
Спасибо за помощь
 
Мда, для таких вопросов есть раздел для начинающих.

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;
 
А как поправить код, чтобы к кирилице 1251 все приводил, а то не верно отображает.

Разобрался.
 
Господа офицеры! :)

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

Спасибо.

ЗЫ обновить php до php5 на моём хостинге невозможно.
 
designf написал(а):
А как поправить код, чтобы к кирилице 1251 все приводил, а то не верно отображает.

Разобрался.

Не подскажешь как, ато у меня эта проблема уже не впервой, много чего перепробывал не помогает
 
регулярными выражениями
 
Не подскажешь как, ато у меня эта проблема уже не впервой, много чего перепробывал не помогает
Для просмотра ссылки Войди или Зарегистрируйся

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