使用Python etree获取XML属性
这是我的 xml
文件
<Departments orgID="1234 " name="This is Demo Name">
<Department>
.
.
</Department>
<Department>
.
.
</Department>
</Departments>
我想通过 orgID
来获取这个 xml 的属性。
假设 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 个回答
1
ET(ElementTree)并不支持完整的xpath,所以你要么使用lxml库,要么自己写完整的逻辑,使用find、search、.attrib和循环来实现。这样做可能会比较麻烦 :(
大概是这样的
root.find("/Departments/orgID").attrib['text']
ect
我已经有一年多没用ET了,所以帮不了你太多了 :)
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')