parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

«Если так» — так.

j-Walker 25.06.2012 11:58 / 25.06.2012 12:04

"Если так" = "Если преобразовывать участки xdoc в объект представленным образом"

Хотел получить хэш хэшей и таблиц. Собственно этот вариант уже не рассматривается. Но таблица ввиду неуникальности наименований элементов не конвертируется в хэш один-в-один, поэтому для таблиц использую хэш с численными ключами - так что вопрос отличения таблицы от списка всё ещё стоит.

Сложность в том, чтобы определять, во что конвертировать ветку - в таблицу (теперь хэш с численными ключами) или хэш (теперь хэш со строковыми ключами). Посредством подсчёта количества идентичных элементов на каждой итерации перебора nodelist - неэстетично, с моей точки зрения.

Отсюда вопрос - можно ли это сделать изящнее.
@nodeToObject[node][node;children;resHash;keyID;row]
$children[$node.childNodes]
^if($children == 1 && $children.0.nodeName eq 'text'){
	$result[$children.0.nodeValue]
	}{
	$resHash[^hash::create[]]
	$row(0)
	^for[keyID](0;$children-1){
		^if($children.$keyID.nodeName ne 'text'){
			^if(^node.getElementsByTagName[$children.$keyID.nodeName] > 1){
				$row($row+1)
				$resHash.0[	$.elementName[$children.$keyID.nodeName]	]
				$resHash.$row[^nodeToObject[$children.$keyID]]
				}{
				$resHash.[$children.$keyID.nodeName][^nodeToObject[$children.$keyID]]
				}
			}
		}
	$result[$resHash]
	}