|
|
|
| народ! поможите!! по поиску почитал... мало чего путного нашел по моему вопросу... вобщем задача следующая: надо xml блок разобрать средствами php. Использовать расширения работающие с xml не предстовляется возможном, поэтому начали писать функцию. Впринципе задача мне кажеться не сложная потому как структура данных четко выражена и остаеться неизменной. Изменяеться только текст. Я так понял для разбора небходимо использовать рег. выражения. В этом и запнулся.... никак с ними нормальо разобраться не могу....... приходиться на прримерах.. дома начал работать ничего толком не получилось.. может поможете разобраться?
вот структура данных:
<data sid=”персональный идентификатор”>
<data rid=”идентификатор запроса”
TimeStamp=”..........”>
текст
</data>
…………….
</data>
|
надо выделить из блока sid, rid, TimeStamp ну и сам текст. Сложность еще в том (по крайней мере для меня) что внутри sid блока может быть несколько блоков rid, надеюсь понятно изложил.........
так вот как составить рег. выражения с помощью которых можно будет выцепить выше указанные строки?
З.Ы. я тут подумал... а в пхп случаем уже встроенных функций для разбора хмл нету часом? может не стоит изобретать велосипед?? | |
|
|
|
|
|
|
|
для: localGhost
(15.04.2005 в 03:41)
| | После блока
<data sid=”персональный идентификатор”>
|
встречаются ещё такие блоки и вообще имеется ещё тэги </data>?
PS Одним регулярным выражением здесь не обойтись, следует сначала вырезать содержимое блока sid строковыми функциями, а затем разбирать это содержимое...
PPS Встроенных нет, имееются расширения, по крайней мере в PHP 4, причём их настройка тоже разнится от сервера к серверу... | |
|
|
|
|
|
|
|
для: cheops
(15.04.2005 в 12:55)
| | а вот , например, если есть xml файл , в котором периодически встречается
<time>1112351629</time>
...
<time>1112351824</time>
...
и тд
|
и нужно все вхождения заменить датой-временем в "нормальном " представлении.
Как это проще сделать? | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(15.04.2005 в 22:15)
| | Блоьшое спасибо за отзыв! на выходных сам разобрался. Оказываеться в пхп есть функции по работе с xml (у меня пхп 5 установлен... надо проверить может ниже версии не поддерживают). Благодаря им все оказалось проще паренной репы.
хотя в спецификаци написано что поддержка выше 4.3 версии чтоли........
но заморочка оказалась в другом. не смог разобраться с кирилицей, вместо русских символов писались вопросительные знаки, в описании говорилось об этом, но там не было сказано как эту проблему обойти.
З.Ы. хмл показался мне достаточно выгодным форматом, например в статистике у меня информация записываеться в файлы в виде определенной структуры, я вот думаю может на хмл переделать, только вот видимо придеться класс писать который будет правильно обновлять данные в файле.....
З.З.Ы. провере на хостинге... там установлен пхп 4.3.1 - работает без проблем, значит в инфе не обманули)) | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(18.04.2005 в 05:24)
| | а как вообще считаете резонно ли использовать xml? допустим статистика у меня для каждого месяца храниться в отдельном файле... но, вот щас глянул, за этот месяц лопустим такой файл весит уже 100 Кб, если это все в хмл перегнать размер увеличится наверно как минимум в два раза..... насколько скажиться на производительности?
ИМХО базы в файлах, которые построены таблицами, проще и удобней храни с xml разметкой... но размерчик файла при этом может быть не хилым
З.Ы. для статистики не хочу использовать mySQL по нескольком причинам: слишком захламлять не хочеться.... да и потом мне кажеться (по крайней мере для меня) в БД я так не смогу удобно сгрупировать данные. | |
|
|
|
|
|
|
|
для: localGhost
(18.04.2005 в 06:40)
| | а не подкините ли простой примерчик xml + php для проверки работоспособности связки? php 5.0.4 | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: 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 ) ) | |
|
|
|
|
|
|
|
для: RV
(18.04.2005 в 19:57)
| | Это дампы массивов Index и Vals - следует просматривать исходные коды HTML-страниц - там они в более презентабельном виде. или обрамлять вывод print_r() тегами
<?php
echo "<pre>";
print_r($vals);
echo "</pre>";
?>
|
| |
|
|
|
|
 5.2 Кб |
|
|
для: cheops
(18.04.2005 в 23:14)
| | мдя.... статистика блин.. прикинул размерчик файла: килобайт этак 500 в среднем... не ущербно ли для процессора?? но работать с xml удобнее то....
хотя щас посчитал, на 1000 записей получиться примерно килобайт 250-300, сейчас у меня все храниться в текстовый файлах и на 817 записей (за последний месяц) приходиться 100 Кб. Но зато в хмл продмсал как можно легко записывать еще и данные переданные пост запросом.. правда надо будет сделать отсечку а то можно совсем засорить файл..... а пост мне нужен (как и гет) для контроля - а не послали ли кто что нехорошее.... короче для мониторинга так сказать уязвимых мест. вот. что думаете? | |
|
|
|
|
|
|
|
для: localGhost
(18.04.2005 в 06:40)
| | Может быть имеет смысл хранить понедельную статистику в отдельных файлах, а остальное архивировать. Или вообще только за один день.
Либо долговременно хранить не полную статистику, а статистистические данные за весь месяц или неделю - "сколько всего". | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(18.04.2005 в 08:50)
| | ну понедельную статистику не очень удобно мне хранить.... впринципе почитал тут, поискал.. и решил наверно все таки буду переводить свою систему статистики на xml файлы..... вот мне только интересно все таки сильно ли загрузиться процессор сервера если такой файлик будет весить килобайт этак 300.. вроде размер не такой уже и большой но хрен его знает......
По части всетаки БД, создатели PowerCounter поймите мою критику правильно.... счетчик удобный базару нет)) но мне сразу не понравилась кнопочка "очистить базу данных", надо все таки как-то архивировать статистику..... иногда интересно поднять старые данные и посмотреть как все менялось..... а если админ возмет и удалит это все... обыдно будет)) | |
|
|
|
|
|
|
|
для: localGhost
(18.04.2005 в 09:12)
| | Удалите файл clear_bd.php (мы так и сделали), про архивирование мы тоже думали и планируем его реализовать в третьей версии счётчика. | |
|
|
|
|
|
|
|
для: 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 (Правда это от настроек расширений зависит и не всегда проходит). | |
|
|
|