Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 6, 2011 15:12:29

nightfog
От:
Зарегистрирован: 2011-04-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

element tree и формат документа

задача элементарная получить в stdin кусок xml и найти значение тега ну или тегов

from xml.etree import ElementTree as ET
data = sys.stdin.read()
element = ET.XML(str(data))


tag="name1"

for subelement in element:
val = subelement.findtext(tag)
if not val == None:
print val
все работает если структура документа выглядит так
<xml>
<sub>
<name1>value1</name1>
<name2>value2</name2>
</sub>
</xml>
но если документ приходит в виде

<xml>
<name1>value1</name1>
<name2>value2</name2>
</xml>
findtext выдает значение None



Отредактировано (Июнь 6, 2011 15:56:27)

Офлайн

#2 Июнь 6, 2011 15:47:41

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

element tree и формат документа

У вас документ не валидный - name2 не закрыт.
вот пример по чтению xml

Офлайн

#3 Июнь 6, 2011 15:57:53

nightfog
От:
Зарегистрирован: 2011-04-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

element tree и формат документа

name2 закрыт это я опечатался , проблема именно в иерархии, вообщем я забил на element tree и сделал через minidom все работает



Отредактировано (Июнь 6, 2011 15:58:26)

Офлайн

#4 Июнь 7, 2011 02:09:57

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

element tree и формат документа

nightfog
проблема именно в иерархии, вообщем я забил на element tree
нет проблем с иерархией (проблема в Вашем коде), в общем зря на element tree забили, minidom'у до него как пешком до Шанхая :)
from xml.etree import ElementTree as ET

xml1 = """\
<xml>
<sub>
<name1>value1</name1>
<name2>value2</name2>
</sub>
</xml>
"""

xml2 = """\
<xml>
<name1>value1</name1>
<name2>value2</name2>
</xml>
"""

dom = ET.XML(xml1)
for node in dom.iterfind(".//name1"):
print(node.tag, node.text)

dom = ET.XML(xml2)
for node in dom.iterfind(".//name1"):
print(node.tag, node.text)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version