Получить атрибут xml, используя python etree
Вот мой xml
<Departments orgID="1234 " name="This is Demo Name">
<Department>
.
.
</Department>
<Department>
.
.
</Department>
</Departments>
Я хочу получить атрибут этого XML с помощью orgID.
предполагать orgID=1234
тогда вывод должен быть
This is Demo Name
Что я пробовал,
import urllib2
import lxml.etree as ET
url="url goes here"
xmldata = urllib2.urlopen(url).read()
root = ET.fromstring(xmldata)
print root.xpath('//Departments/orgID[text()="1234"]/preceding-sibling::name/text()')[0]
Но получаю ошибку,
Traceback (most recent call last):
File "D:\JAVA\test-img\test\test.py", line 12, in <module>
print root.xpath('//Departments/orgID[text()="1234"]/preceding-sibling::name/text()')[0]
IndexError: list index out of range
Что не так я делаю здесь?
2 ответа
Решение
Является <Departments>
корень документа XML? Если так, то будет ли это уместным?
import urllib2
import lxml.etree as ET
url="url goes here"
xmldata = urllib2.urlopen(url).read()
root = ET.fromstring(xmldata)
if root.get('orgID') == "1234":
print root.get('name')
ET не имеет полной поддержки xpath, вы должны либо использовать lxml, либо написать полную логику, используя find, search .attrib и looping:(
что-то вроде
root.find("/Departments/orgID").attrib['text']
ect
Прошло уже больше года с тех пор, как я использовал ET, поэтому я не могу помочь вам намного больше:)