Новости | 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, хотя может я не понял исходную задумку.