| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 17.06.2010 03:14 / 17.06.2010 03:43
если использовать оригинальный метод (убрал вызов compact и определил локальные переменые), то результаты такие (Time, BL и KB -- это то, что возвращаем Erusage):@USE
Erusage.p
Node.p
@main[]
$x[^xdoc::load[x.xml]]
^memory:compact[]
^Erusage:measure{
$h[^_xml2hash[$x]]
}[v]
#^dstop[$h]
Time: $v.time ms<br />
BL: $v.memory_block<br />
KB: $v.memory_kb<br />
ever_allocated_since_compact: $status:memory.ever_allocated_since_compact<br />
@_xml2hash2[xNode][i;result;node]
^switch($xNode.nodeType){
^case(1){
$result[^hash::create[]]
$i(0)
^if($xNode.nodeName eq "ids" || ^xNode.getAttribute[type] eq "array"){
^Node:foreachChild[$xNode;;node;]{
$result.[$i][^_xml2hash2[$node]]
$i($i+1)
}
}{
^Node:foreachChild[$xNode;;node;]{
$result.[$node.nodeName][^_xml2hash2[$node]]
$i($i+1)
}
}
^if(!$i){
$result[$xNode.firstChild.nodeValue]
}
}
^case(3){
$result[$xNode.nodeValue]
}
^case(9){
$result[^_xml2hash2[$xNode.documentElement]]
}
^case[DEFAULT]{
^throw[...;...]
}
}
#end @_xml2hash2[]кстати результаты работы методов немного не совпадают, и мне кажется, что ошибка в оригинальном xml2hash. если расскоментировать dstop и смотреть на получившийся хеш, то видим.$.0[ $.created_at[Wed Jun 16 15:04:36 +0000 2010] $.id[16312661011] ... $.in_reply_to_screen_name[void] $.contributors_enabled[ $.id[12] $.name[Jack Dorsey]xml2hash2:
$.0[ $.created_at[Wed Jun 16 15:04:36 +0000 2010] $.id[16312661011] ... $.in_reply_to_screen_name[void] $.user[ $.id[12] $.name[Jack Dorsey]разница в 3 строке снизу (contributors_enabled/user). судя по xml должно быть user, хотя может я не понял исходную задумку.