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