Найти - Пользователи
Полная версия: Рекурсия в питоне
Начало » Python для новичков » Рекурсия в питоне
1
nonamez
Набросал тут небольшую функцию по примерам из интернета, но возникли проблемы с рекурсией…

def toSimpleXml(data, wrap = False):
	result = list()
	input_data_type = type(data)
	if input_data_type is list:
		for sub_element in data:
			result.append(toSimpleXml(sub_element))
		return ''.join(result)
	elif input_data_type is dict:
		for tag_name in data:
			sub_element = data[tag_name]
			result.append('<%s>' % tag_name)
			result.append(toSimpleXml(sub_element))
			result.append('</%s>' % tag_name)
		return ''.join(result)
	
	if wrap:
		return '<%s>%s</%s>' % (wrap, data, wrap)
	
	return data
data = [{'element_1': 'value_1'}, {'element_2': {'element_2_1': 'value_2_1'}}]
print toSimpleXml(data, 'root')

По идее оно всё должно врапнуть ещё и роот тэгом, но не врапает…
py.user.next
>>> def toSimpleXml(data, wrap=None):
...     out = data
...     result = []
...     input_data_type = type(data)
...     if input_data_type is list:
...         for sub_element in data:
...             result.append(toSimpleXml(sub_element))
...         out =  ''.join(result)
...     elif input_data_type is dict:
...         for tag_name in data:
...             sub_element = data[tag_name]
...             result.append('<%s>' % tag_name)
...             result.append(toSimpleXml(sub_element))
...             result.append('</%s>' % tag_name)
...         out =  ''.join(result)
...     else:
...         assert input_data_type is str, 'not a string'
...     if wrap is not None:
...         return '<%s>%s</%s>' % (wrap, out, wrap)
...     return out
... 
>>> data = [{'element_1': 'value_1'}, {'element_2': {'element_2_1': 'value_2_1'}}]
>>> print toSimpleXml(data, 'root')
<root><element_1>value_1</element_1><element_2><element_2_1>value_2_1</element_2_1></element_2></root>
>>> 
>>> print toSimpleXml(1, 'root')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 17, in toSimpleXml
AssertionError: not a string
>>>

также надо помнить, что у словаря произвольный порядок элементов
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB