Получить атрибут 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, поэтому я не могу помочь вам намного больше:)

Другие вопросы по тегам