Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг Xml данных, С помощью регулярных выражений 
:(
    Опции темы
Dron
Дата 3.8.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



Имеется функция парсинга XML данных

Код

function xml2array($xml) {
    $xmlary = array ();

    $ReElements = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*?)<(\/\s*\1\s*)>)/s';
    $ReAttributes = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';

    preg_match_all($ReElements, $xml, $elements);

    foreach ($elements[1] AS $ie=>$xx) {
        $xmlary[$ie]['name'] = $elements[1][$ie];

        if ($attributes = trim($elements[2][$ie])) {
            preg_match_all($ReAttributes, $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($ReElements, $elements[3][$ie])) {
            $xmlary[$ie]['elements'] = xml2array($elements[3][$ie]);
        } elseif (isset($elements[3][$ie])) {
            $xmlary[$ie]['text'] = $elements[3][$ie];
        }

        $xmlary[$ie]['closetag'] = $elements[4][$ie];
    }

    return $xmlary;
}


И есть XML данные для парсинга

Код

<TG><F name="Aaa" description="Bbb"/></TG>


Всё работает замечательно, пока в XML данных не встречаются спец символы "/" или ">"

Пробовал переписывать первое регулярное выражение на предмет отрицания всего подшаблона (?!(/> ).*), но в таком случае парсинг не корректно происходит

Как вот эту функцию переписать, что бы нормально обрабатывались данные, в которых есть символы "/" и/или ">" ?

PS. От SAX по некоторым причинам пришлось отказаться. С DOM не работал
PM   Вверх
GiV
Дата 3.8.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 13.7.2006
Где: rus|53

Репутация: нет
Всего: 9



Попробуйте жадность уменьшить.
PM MAIL WWW ICQ   Вверх
Dron
Дата 4.8.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



Эксперименты с жадностью ничего хорошего не дали smile

Можно ли с помощью DOM XML получить аналогичную структуру массива?

Код

Array
(
    [0] => Array
        (
            [name] => TG
            [elements] => Array
                (
                    [0] => Array
                        (
                            [name] => F
                            [attributes] => Array
                                (
                                    [name] => Aaa
                                    [description] => Bbb
                                )

                            [text] => 
                            [closetag] => 
                        )

                )

            [closetag] => /TG
        )

)

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.3939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.