Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
netadmin.ws
Панель управления Регистрция свободна! Календарь Список пользователей Часто задаваемые вопросы Поиск по форуму Архив скриптов Главная   
Форум сетевых администраторов
Форум сетевых администраторов Форум сетевых администраторов » Программирование » PHP » Парсинг Xml данных
Предыдущая тема     Следующая тема
Автор
Тема    Новая тема     Ответить на эту тему
Andrej
Участник+
Средний рейтинг: 4.89 | Оценок: 9
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Aug 2002
Место проживания: Омск
Публикаций: 261
Статус: Andrej в оф-лайне
Парсинг Xml данных [сообщение #82602]

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


PHP:


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

    
$ReElements = '/<(w+)s*([^/>]*)s*(?:/>|>(.*?)<(/s*1s*)> )/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 данные для парсинга


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



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

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

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

__________________
f9ffe3323e79b2a558b92af5b4039e20

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 31-07-2006 21:53
Нажмите сюда для просмотра профайла Andrej Отправить Персональное сообщение Andrej Посетить домашнию страничку Andrej! Найти сообщения от Andrej Добавить Andrej в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
DicsyDel
Просто битнер...
Средний рейтинг: 2.33 | Оценок: 3
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Aug 2002
Место проживания: Севастополь
Публикаций: 154
Статус: DicsyDel в оф-лайне
[сообщение #82605]

Юзай стандратные функции пхп для парсинга XML... EXPAT.. это процедурный способ парсинга XML... задавай функции-хандлеры... либо, что я советую, юзай DOM XML... очень удобно...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 01-08-2006 09:51
Нажмите сюда для просмотра профайла DicsyDel Отправить Персональное сообщение DicsyDel Посетить домашнию страничку DicsyDel! Найти сообщения от DicsyDel Добавить DicsyDel в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Andrej
Участник+
Средний рейтинг: 4.89 | Оценок: 9
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Aug 2002
Место проживания: Омск
Публикаций: 261
Статус: Andrej в оф-лайне
[сообщение #82608]

quote:
Первоначальное сообщение от DicsyDel
Юзай стандратные функции пхп для парсинга XML... EXPAT.. это процедурный способ парсинга XML... задавай функции-хандлеры... либо, что я советую, юзай DOM XML... очень удобно...


Мдя. Если я выбрал именно этот способ, значит на то были причины. По существу есть что сказать?

__________________
f9ffe3323e79b2a558b92af5b4039e20

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 01-08-2006 21:18
Нажмите сюда для просмотра профайла Andrej Отправить Персональное сообщение Andrej Посетить домашнию страничку Andrej! Найти сообщения от Andrej Добавить Andrej в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
[сообщение #82609]

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

__________________
Всегда есть решение.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 01-08-2006 23:32
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя



Формат времени GMT. Текущее время 21:19.
Новая тема   Ответить на эту тему [ Версия для печати Печать | Отправить эту страницу другу/знакомому! Отправить | Получать уведомления об обновлении этой темы Подписка ] Предыдущая тема     Следующая тема
Навигация по форуму:
Оценка темы:

Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения.
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
 

Page generated in 0.50851011 seconds (99.12% PHP - 0.88% MySQL) with 21 queries.


  Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
©NetAdmin.ws, 2001-2026.
Powered by: vBulletin
Copyright ©2000, 2001, Jelsoft Enterprises Limited.