Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет aleshru ([info]aleshru)
@ 2004-11-11 15:45:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Это про Пхп
Что-то совсем охуенные куски кода нахожу. И меняю. Похмелье?
Было


<?
$stack
= array();
function
startTag($parser, $name, $attrs)
{
   global
$stack;
   
$tag=array("name"=>$name,"attrs"=>$attrs);

   
array_push($stack,$tag);

}

function
cdata($parser, $cdata)
{
   global
$stack,$i;

  
   if(
trim($cdata))
   {   
       
$stack[count($stack)-1]['cdata']=$cdata;   

   }
}

function
endTag($parser, $name)
{
   global
$stack;
   
$stack[count($stack)-2]['children'][] = $stack[count($stack)-1];

   
array_pop($stack);
}


$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "cdata");


$data = xml_parse($xml_parser,$response);
if(!
$data) {
   die(
sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),

xml_get_current_line_number($xml_parser)));
   }
xml_parser_free($xml_parser);


foreach(
$stack['0']['children'] as $k=>$v){

    if(
$v['name']=="REPLY"){
        
$XMLAPIReply    =    $stack['0']['children'][$k]['cdata'];

        }
}
?>


Стало

<?
  
function _getXMLAPIReply($response){
       
preg_match("!<reply>(.*?)</reply>!si",$response,$XMLAPIReply);

       return
$XMLAPIReply['1'];
   }
?>



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


[info]_felix_@lj
2004-11-11 03:33 (ссылка)
php я правда не знаю, но очень странно выглядит кусок кода в 40-50 стро из которого получается 5 ... Можешь пояснить чего это ? 8-)

(Ответить) (Ветвь дискуссии)


[info]aleshru@lj
2004-11-11 03:35 (ссылка)
Это всего-лишь парсинг XML'я стандартными функциями для этого предназначенными (написано кем-то другим до меня) и парсинг XML'я с помощью регулярных выражений.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]_felix_@lj
2004-11-11 03:48 (ссылка)
Я так и подумал, только не вижу где сам парсин происходит ...
_getXMLAPIReply - это же твоя функция ...
preg_match - судя по названию кроме поиска регулярных выражения ничего не делает ...
где же сам парсинг ? 8-)))) Или ты его вызов просто не вставил во торой выриант ?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]aleshru@lj
2004-11-11 03:51 (ссылка)
_getXMLAPIReply return`ит результат такой же как и первый код.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]_felix_@lj
2004-11-11 03:57 (ссылка)
Ладно-ладно, больше не достаю 8-)

(Ответить) (Уровень выше)


[info]noboonaga@lj
2004-11-11 04:07 (ссылка)
$s = simplexml_load_file('some.xml');
var_dump($s->reply);

(Ответить) (Ветвь дискуссии)


[info]aleshru@lj
2004-11-11 04:08 (ссылка)
А с сорсом оно умеет работать или только файл?

(Ответить) (Уровень выше)


[info]aleshru@lj
2004-11-11 04:10 (ссылка)
нашёл уже (http://ru2.php.net/manual/ru/function.simplexml-load-string.php).
Да-да, я знаю. Скоро поставлю пятёрку

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]noboonaga@lj
2004-11-11 04:38 (ссылка)
=))))
а я как раз в ман полез показывать =))))

(Ответить) (Уровень выше)


[info]aleshru@lj
2004-11-23 00:19 (ссылка)
Большое тебе и человеческое спасибо!
Я вот установил 5-ку и начал нормульно всё делать:)

(Ответить) (Уровень выше)


[info]nagashka@lj
2004-11-11 20:44 (ссылка)
к сожалению функции специально предназначенные для распарсивания ПХП отработают НАМНОГО быстрее чем преги... =(

и кстати libxml2 из пятёрки жуть как хороша и быстра...
ня! =)

(Ответить) (Ветвь дискуссии)


[info]aleshru@lj
2004-11-11 21:19 (ссылка)
Те 40 строчек быстрее работают чем preg_match?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]nagashka@lj
2004-11-11 21:26 (ссылка)
80% вероятности того, что да... быстрее...
если вообще использовать libxml2, то 100% уверености. =)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]aleshru@lj
2004-11-11 21:27 (ссылка)
А SimpleXML использует libxml2?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]nagashka@lj
2004-11-11 22:10 (ссылка)
да

(Ответить) (Уровень выше)