使用Python etree获取XML属性

1 投票
2 回答
2102 浏览
提问于 2025-04-17 23:15

这是我的 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')

撰写回答