Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: разобрать xml средствами php
 
 автор: localGhost   (15.04.2005 в 03:41)   письмо автору
 
 

народ! поможите!! по поиску почитал... мало чего путного нашел по моему вопросу... вобщем задача следующая: надо xml блок разобрать средствами php. Использовать расширения работающие с xml не предстовляется возможном, поэтому начали писать функцию. Впринципе задача мне кажеться не сложная потому как структура данных четко выражена и остаеться неизменной. Изменяеться только текст. Я так понял для разбора небходимо использовать рег. выражения. В этом и запнулся.... никак с ними нормальо разобраться не могу....... приходиться на прримерах.. дома начал работать ничего толком не получилось.. может поможете разобраться?

вот структура данных:


<data sid=”персональный идентификатор”>
   <data rid=”идентификатор запроса” 
      TimeStamp=”..........”>
      текст
   </data>
      …………….
</data>



надо выделить из блока sid, rid, TimeStamp ну и сам текст. Сложность еще в том (по крайней мере для меня) что внутри sid блока может быть несколько блоков rid, надеюсь понятно изложил.........
так вот как составить рег. выражения с помощью которых можно будет выцепить выше указанные строки?

З.Ы. я тут подумал... а в пхп случаем уже встроенных функций для разбора хмл нету часом? может не стоит изобретать велосипед??

   
 
 автор: cheops   (15.04.2005 в 12:55)   письмо автору
 
   для: localGhost   (15.04.2005 в 03:41)
 

После блока
<data sid=”персональный идентификатор”>

встречаются ещё такие блоки и вообще имеется ещё тэги </data>?

PS Одним регулярным выражением здесь не обойтись, следует сначала вырезать содержимое блока sid строковыми функциями, а затем разбирать это содержимое...
PPS Встроенных нет, имееются расширения, по крайней мере в PHP 4, причём их настройка тоже разнится от сервера к серверу...

   
 
 автор: denvor   (15.04.2005 в 17:27)   письмо автору
 
   для: cheops   (15.04.2005 в 12:55)
 

а вот , например, если есть xml файл , в котором периодически встречается

<time>1112351629</time>
...
<time>1112351824</time>
...
и тд

и нужно все вхождения заменить датой-временем в "нормальном " представлении.
Как это проще сделать?

   
 
 автор: cheops   (15.04.2005 в 22:15)   письмо автору
 
   для: denvor   (15.04.2005 в 17:27)
 

Это проще сделать через регулярные выражения с использованием функции обратного вызыва
<?php 
  $text 
"<time>1112351629</time> ... <time>1112351824</time> ... и тд";
  
// Заменяем дату в TIMESTAMP-формате на читабельную...
  
echo preg_replace_callback(
              
"|<time>([^<]*)</time>|",
              
"replace_date",
              
$text);
  
// функция обратного вызова
  
function replace_date($matches
  {
    
// как обычно: $matches[0] -  полное вхождение шаблона
    // $matches[1] - вхождение первой подмаски,
    // заключенной в круглые скобки, и так далее...
    
return "<time>".date("Y-m-d H:i:s",$matches[1])."</time>";
  }
?>

   
 
 автор: localGhost   (18.04.2005 в 03:42)   письмо автору
 
   для: cheops   (15.04.2005 в 22:15)
 

Блоьшое спасибо за отзыв! на выходных сам разобрался. Оказываеться в пхп есть функции по работе с xml (у меня пхп 5 установлен... надо проверить может ниже версии не поддерживают). Благодаря им все оказалось проще паренной репы.

хотя в спецификаци написано что поддержка выше 4.3 версии чтоли........

но заморочка оказалась в другом. не смог разобраться с кирилицей, вместо русских символов писались вопросительные знаки, в описании говорилось об этом, но там не было сказано как эту проблему обойти.

З.Ы. хмл показался мне достаточно выгодным форматом, например в статистике у меня информация записываеться в файлы в виде определенной структуры, я вот думаю может на хмл переделать, только вот видимо придеться класс писать который будет правильно обновлять данные в файле.....

З.З.Ы. провере на хостинге... там установлен пхп 4.3.1 - работает без проблем, значит в инфе не обманули))

   
 
 автор: glsv (Дизайнер)   (18.04.2005 в 05:24)   письмо автору
 
   для: localGhost   (18.04.2005 в 03:42)
 

Да, проблемы с кириллицей регулярно обсуждаются на форуме. Это проблема перекодировки из UTF, которая используется в XML. Наиболее универсальный вариант – это посимвольная перекодировки, так как все другие способы требуют наличия библиотек на хосте – iconv или mbstring.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3425&page=1

   
 
 автор: localGhost   (18.04.2005 в 06:40)   письмо автору
 
   для: glsv (Дизайнер)   (18.04.2005 в 05:24)
 

а как вообще считаете резонно ли использовать xml? допустим статистика у меня для каждого месяца храниться в отдельном файле... но, вот щас глянул, за этот месяц лопустим такой файл весит уже 100 Кб, если это все в хмл перегнать размер увеличится наверно как минимум в два раза..... насколько скажиться на производительности?

ИМХО базы в файлах, которые построены таблицами, проще и удобней храни с xml разметкой... но размерчик файла при этом может быть не хилым

З.Ы. для статистики не хочу использовать mySQL по нескольком причинам: слишком захламлять не хочеться.... да и потом мне кажеться (по крайней мере для меня) в БД я так не смогу удобно сгрупировать данные.

   
 
 автор: RV   (18.04.2005 в 07:51)   письмо автору
 
   для: localGhost   (18.04.2005 в 06:40)
 

а не подкините ли простой примерчик xml + php для проверки работоспособности связки? php 5.0.4

   
 
 автор: localGhost   (18.04.2005 в 08:00)   письмо автору
 
   для: RV   (18.04.2005 в 07:51)
 


<?
$simple 
"<para><note>simple note</note></para>";
$p xml_parser_create();
xml_parse_into_struct($p,$simple,$vals,$index);
xml_parser_free($p);
echo 
"Index array\n";
print_r($index);
echo 
"\nVals array\n";
print_r($vals);
?>

   
 
 автор: RV   (18.04.2005 в 19:57)   письмо автору
 
   для: localGhost   (18.04.2005 в 08:00)
 

а что в примере должно отобразится?
у меня вот это

Index array Array ( [PARA] => Array ( [0] => 0 [1] => 2 ) [NOTE] => Array ( [0] => 1 ) ) Vals array Array ( [0] => Array ( [tag] => PARA [type] => open [level] => 1 ) [1] => Array ( [tag] => NOTE [type] => complete [level] => 2 [value] => simple note ) [2] => Array ( [tag] => PARA [type] => close [level] => 1 ) )

   
 
 автор: cheops   (18.04.2005 в 23:14)   письмо автору
 
   для: RV   (18.04.2005 в 19:57)
 

Это дампы массивов Index и Vals - следует просматривать исходные коды HTML-страниц - там они в более презентабельном виде. или обрамлять вывод print_r() тегами
<?php
  
echo "<pre>";
  
print_r($vals);
  echo 
"</pre>";
?>

   
 
 автор: localGhost   (19.04.2005 в 10:29)   письмо автору
5.2 Кб
 
   для: cheops   (18.04.2005 в 23:14)
 

мдя.... статистика блин.. прикинул размерчик файла: килобайт этак 500 в среднем... не ущербно ли для процессора?? но работать с xml удобнее то....

хотя щас посчитал, на 1000 записей получиться примерно килобайт 250-300, сейчас у меня все храниться в текстовый файлах и на 817 записей (за последний месяц) приходиться 100 Кб. Но зато в хмл продмсал как можно легко записывать еще и данные переданные пост запросом.. правда надо будет сделать отсечку а то можно совсем засорить файл..... а пост мне нужен (как и гет) для контроля - а не послали ли кто что нехорошее.... короче для мониторинга так сказать уязвимых мест. вот. что думаете?

   
 
 автор: glsv (Дизайнер)   (18.04.2005 в 08:50)   письмо автору
 
   для: localGhost   (18.04.2005 в 06:40)
 

Может быть имеет смысл хранить понедельную статистику в отдельных файлах, а остальное архивировать. Или вообще только за один день.
Либо долговременно хранить не полную статистику, а статистистические данные за весь месяц или неделю - "сколько всего".

   
 
 автор: localGhost   (18.04.2005 в 09:12)   письмо автору
 
   для: glsv (Дизайнер)   (18.04.2005 в 08:50)
 

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

По части всетаки БД, создатели PowerCounter поймите мою критику правильно.... счетчик удобный базару нет)) но мне сразу не понравилась кнопочка "очистить базу данных", надо все таки как-то архивировать статистику..... иногда интересно поднять старые данные и посмотреть как все менялось..... а если админ возмет и удалит это все... обыдно будет))

   
 
 автор: cheops   (18.04.2005 в 13:01)   письмо автору
 
   для: localGhost   (18.04.2005 в 09:12)
 

Удалите файл clear_bd.php (мы так и сделали), про архивирование мы тоже думали и планируем его реализовать в третьей версии счётчика.

   
 
 автор: cheops   (18.04.2005 в 12:25)   письмо автору
 
   для: localGhost   (18.04.2005 в 03:42)
 

Для перекодировки из UTF для XML в PHP имеются специальные функции urlencode и urldecode, но они преобразуют из iso8859-5 в UTF и обратно, поэтому совместно с ними следует применять convert_cyr_string. Подробности в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=164 (Правда это от настроек расширений зависит и не всегда проходит).

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования