shiza
Авг. 26, 2008 16:56:01
Раньше писал его в прям в строку.
А cейчас понадобилась такая функциональность:
Сформировать кусок дерева отдельно. Ткнуть его в какой-нибудь узел основной XML-ки. Не понравилось - отцепить, перенести в другое место.
Посмотреть - кто там парент, быстро сделать поиск по чаилдам.
Хотелось бы все это иметь в питоник-стиле =)
Сейчас по привычке смотрю в сторону Чудесного Супа.
Но может есть либы, настолько кошерные и удобные, что стоит потратить время на их изучение?
bw
Авг. 26, 2008 18:00:15
Я все же предпочитаю использовать стандартные решения, DOM в твоем случае. Или становящееся стандартом, ElementTree.
Я бы смотрел в сторону DOM и, при необходимости, дополнял интерфейс, дописывал бы утилитарный функционал, облегчающий работу с DOM.
..bw
shiza
Авг. 26, 2008 18:46:35
А в чем разница между DOM и ElementTree?
shiza
Авг. 26, 2008 22:04:59
Попробовал ElementTree:
Негативные выводы:
1. у элемента нельзя узнать родителя без дополнительных нетривиальных телодвижений.
2. чтобы распечатать красивый xml - нужно писать свою функцию.
3. никак не могу задать текст юникодом (русскими буквами) как не пытаюсь - всегда получаю фигню
Позитивные:
1. Все довольно просто и интуитивно.
2. Для доступа к тексту элемента есть атрибут text (а не отдельная нода, как обычно)
poltergeist
Авг. 27, 2008 08:44:20
3)
import xml.etree.cElementTree as etree
etree.tostring(element, encoding=None)
etree.ElementTree(element).write(file, encoding='us-ascii')
regall
Авг. 27, 2008 14:40:53
Всегда использую xml.dom.minidom, по-моему довольно функционально и не менее интуитивно
shiza
Авг. 27, 2008 14:51:24
Как не кручу - русские буквы получаются написаны энтитями:
# -*- coding: UTF-8 -*-
import xml.etree.ElementTree as ET
description = ET.Element('description')
description.text = u'Я говорю по русски'
print ET.tostring(description)
Получаю & # 1087;…..
poltergeist
Авг. 27, 2008 15:39:45
Я же писал: etree.tostring(element, encoding)
>>> import xml.etree.ElementTree as ET
>>> description = ET.Element('description')
>>> description.text = u'Я говорю по русски'
>>> repr(ET.tostring(description, 'utf-8'))
"'<description>\\xc3\\x9f \\xc3\\xa3\\xc3\\xae\\xc3\\xa2\\xc3\\xae\\xc3\\xb0\\xc3\\xbe \\xc3\\xaf\\xc3\\xae \\xc3\\xb0\\xc3\\xb3\\xc3\\xb1\\xc3\\xb1\\xc3\\xaa\\xc3\\xa8</description>'"
shiza
Авг. 27, 2008 15:46:32
Шайтан, заработало =)
Вроде, что я так делал.
Видимо сонный был…