Форум сайта python.su
0
Набросал тут небольшую функцию по примерам из интернета, но возникли проблемы с рекурсией…
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')
Офлайн
857
>>> 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 >>>
Отредактировано py.user.next (Апрель 17, 2014 07:42:18)
Офлайн