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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML и регистр тэгов 
:(
    Опции темы
HappyLife
Дата 19.1.2012, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток уважаемые!

Совсем недавно реализовал хороший парсер XML документа с помощью SimpleXML.
Все однотипные XML файлы обрабатывались как часы. Но клиент, сказал, что у него есть такого же формата XML файлы, но с верхним регистром тэгов и аттрибутов. И я уже голову сломал, как мне сделать парсерсинг этого файла не делая второй парсер, потому что формат тот же... но регистр другой!
PM MAIL   Вверх
newbee
Дата 19.1.2012, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Если я не ошибаюсь, по стандарту XML регистр имен тегов и атрибутов должен быть нижним, так что клиент подсунул тебе что-то похожее на XML.

а) А почему нельзя изменить свой хороший парсер так, чтобы он съедал теги в верхнем регистре?
б) Если в хорошем парсере все прибито гвоздями, сделай/найди препроцессор, который преобразует файл из верхнего регистра в нижний.


--------------------
You're face to face
With man who sold the world
PM   Вверх
HappyLife
Дата 19.1.2012, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



a) В коде есть

Код

function parsing(SimpleXMLElement $offers)
{
   $offers->offer
}


Который придется заменять на

Код

function parsing(SimpleXMLElement $offers)
{
   $offers->OFFER
}


б) Менять нужно не весь файл, а только тэги!

1) Как вариант, можно попробовать регулярными выражениеми сделать замену тегов..
или 2) Сделать проверку каждого элемента, если нет в нижнем регистре то искать в верхнем....



Это сообщение отредактировал(а) HappyLife - 19.1.2012, 19:53
PM MAIL   Вверх
newbee
Дата 19.1.2012, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Цитата(HappyLife @  19.1.2012,  20:53 Найти цитируемый пост)
Менять нужно не весь файл, а только тэги!
А я это и имела в виду - пройтись по xml-дереву и поправить его.

Цитата(HappyLife @  19.1.2012,  20:53 Найти цитируемый пост)
Сделать проверку каждого элемента, если нет в нижнем регистре то искать в верхнем....
А если тег в виде TagName? Правильно - приводить имя тега в верхний или нижний регистр, а там уже обрабатывать имена.


--------------------
You're face to face
With man who sold the world
PM   Вверх
Sanchezzz
  Дата 20.1.2012, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



я отказался от SimpleXML  по 1 простой причине он не может парсить нестандартные xml и больших форматов у меня файл весил 50мб он загибался + некоторые атрибуты не выводил.

перешел на XMLReader

Код

/* костыль хочу массивы получать... */
 function xml2assoc($xml){ 
    $assoc = NULL; 
    $n = 0; 
    while($xml->read()){ 
        if($xml->nodeType == XMLReader::END_ELEMENT) break; 
        if($xml->nodeType == XMLReader::ELEMENT and !$xml->isEmptyElement){ 
            $assoc[$n]['name'] = $xml->name; 
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value; 
            $assoc[$n]['val'] = xml2assoc($xml); 
            $n++; 
        } 
        else if($xml->isEmptyElement){ 
            $assoc[$n]['name'] = $xml->name; 
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value; 
            $assoc[$n]['val'] = ""; 
            $n++;                
        } 
        else if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value; 
    } 
    return $assoc; 

    
    $reader = new XMLReader();
    $reader->open($file); //открыть файл 
    $reader->read();        // открыть секцию для чтения группа категорий
    $reader->read();        // открыть след секцию вложенную.  // категории
    
/* Категории */
    $category = $reader;
    $datacategory  = xml2assoc( $category );  //категории получить массив
        $reader->read(); //открыть группу секции товары 
        $otders = xml2assoc( $reader->read());  //получаем все товары



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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