Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2010 13:36:22

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск ноды по значению атрибута в xml-документе

Есть вот такой xml:

<?xml version="1.0"?>
<rootnode>
<node id="1">bla-bla-bla</node>
<node id="2">bla-bla-bla</node>
<node id="3">bla-bla-bla</node>
</rootnode>
Нужно найти, например, ноду с id == 2. Первое, что пришло в голову:
from xml.etree import ElementTree

doc = ElementTree.parse("file.xml")
for node in doc.getroot().findall("node"):
if node.attrib["id"] == "2":
print node.text
break
Но как-то перебор не очень нравится, тем более, что нод может быть достаточно много. Возможно, есть более элегантные методы?



Офлайн

#2 Июль 15, 2010 16:30:56

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

Поиск ноды по значению атрибута в xml-документе

XPATH Вам в помощь :)

from xml.etree import ElementTree as ET

dom = ET.parse("file.xml").getroot()
node = dom.find("node[@id='2']")
if node is not None:
print(node.text)



Офлайн

#3 Июль 15, 2010 18:35:53

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск ноды по значению атрибута в xml-документе

Я бы с удовольствием воспользовался xpath'ом, но у меня питон 2.6.4 в котором ElementTree 1.2, а не 1.3, который таких xpath'ов не умеет. http://effbot.org/zone/element-xpath.htm
Использовать сторонние библиотеки не хочу, хочется обойтись стандартными. Есть еще варианты?



Отредактировано (Июль 15, 2010 18:36:09)

Офлайн

#4 Июль 15, 2010 22:01:31

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск ноды по значению атрибута в xml-документе

Vader
Есть еще варианты?
регулярные выражения справятся с твоей задачей на ура



Офлайн

#5 Июль 16, 2010 01:11:04

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск ноды по значению атрибута в xml-документе

dimabest
регулярные выражения справятся с твоей задачей на ура
Похоже, что это единственный вариант при использовании стандартной библиотеки. Ну да ладно, регекспы, так регекспы…



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version