Пара проектов … или как победить XML.

Почти завершил пару проектов. Точнее небольших проектиков.

Сначала сделал довольно симпатичную админ панель. Причем достаточно необычную. Дело в том, что по желанию заказчика, вся информация должна была сохраняться в XML-ах. Дело в том, что он гдето нарыл флеш-карту, то есть веб-магазин, заточенный под использование XML формата. Вероятно для экшн-скриптов это хорошо.

Ну, что я могу сказать, XML обработка, также как впринципе и любая другая обработка текста — сложна и достаточно трудно реализуема. Чтобы народ не городил, про общую доступность методов обработки информации, которые встроены в PHP — эт овсе ерундистика, причем полная. Правда в то, — что дешевой и быстрой, системы обработки теста — не бывает.

SimpleXML

Для обработки и парсинга. я использовал этот самый симплХМЛ. Понравился он мне, или нет? Сложно сказать. Не все так сложно, но есть моменты, окторые убивают. Причем напрочь. Например, нет удалентия «узла» дерева. Почему спрашивается, было бы его не добавить в пхп-шник? Ан зачем, крутые программеры хай юзают DOM. То бишь идея состоит в том, что все простое — то есть развитие дерева, и его изменение делать через простенький SimpleXML. А все «сложное» — то есть удаление веток, через DOM.

Ну не бред, скажите, только честно?

Кроме того, клиент решил меня поразить наповал, и дал в качестве примера хмл-файл, который имел ноды, содержащие информацию в … html. Эт опрсто абзац. Ведь интерфейсы PHP DOM не позволяют сделать элекментарных вещей. Например, получить текст, который лежит внутри элемента. Мало того, не каждый текст, который типа html-ный может быть засунут, во внутрь такой ноды.

Пришлось извратиться, причем довольно таи нестандартным способо. Вот скажите, как запхнуть XML текст (HTML-текст, но суть то почти одна и тажке, верно? ) вовнутрь ноды? Очень просто. Вот решение, только не ржите :)

1
2
3
4
5
6
function xml_save_main_withreplace ( $s, $what, $to  )
{
   global $require_path, $config_main_xml, $config_xml_header;      
   $str = str_replace ( $what, $to, $config_xml_header . $s -> asXML() );
   file_put_contents( $require_path . $config_main_xml,  $str );      
}

Вкратце … делаю ноду, в нее заношу какойто текст, значиться.

1
        $curnode[0] = $what = '{{{inserthere}}}';//

Далее же, когда приходит очередь сохранить весь документ, просто заеняю это дело, с помощью указанной выше функции

1
        xml_save_main_withreplace ( $s, $what, html_entity_decode( pprocess( $p_desc ) )  );

Маленький «прикольчик» состоит в том, что все подряд, как я уже писал, пхать в этот текст нельзя. То есть нужна верификация, вот такого плана:

1
2
3
4
5
6
   $str = $config_xml_header  . "\n<item>" . html_entity_decode( pprocess( $p_desc ) ) . "</item>";
   $xml = @simplexml_load_string(  $str );
   if ( !$xml ) 
   {
      $errs[] = "Can't load anyone HTML here! Your have unclosed tags somewhere in description field. Pls verify this!";
   }

:) Кароче цирковое представление. Ну а как иначе решить эту проблему? Я лично не понял. Информации по XML и PHP, и решение там всего этого хлама — ноль. Зато куча теоретисеских статей, про то, как лучше. Да зачем они нужны, спрашивается? Ведь человек решает конкретную проблему, причем профи надо сделать это быстро. а не коппаться в «доках» и россыпях плассов «DOMа».

Второй проект, или парсинг вебархива.

Гениальная идея. между прочим. По адресу web.archive.org есть огроменный архив информации. За разные года. То есть, всегда остается возможность посмотреть свои гениальные старые сайты. Я вот имел пару … куда они делись.
Дык вот, заказчикпоставил задачу — выкачать старый «снапшут», и сделать из него базу. Сделал. Качается. Защиты пока не поставили. Хоть можно не сомневаться, наверное, поставят … А сделали бы выкачку одним файлом … дык и вообще чудно было бы. Ан нет …

Пара проектов … или как победить XML.: Один комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *