【问题标题】:Get Attribute of xml using python etree使用python etree获取xml的属性
【发布时间】:2014-04-28 11:34:51
【问题描述】:

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

我在这里做错了什么?

【问题讨论】:

  • 您的 xpath 似乎没有匹配任何内容,因为当您请求第一个元素时,只有空列表会出现索引错误

标签: python python-2.7 xml-parsing elementtree xml.etree


【解决方案1】:

&lt;Departments&gt; 是 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')

【讨论】:

    【解决方案2】:

    ET 没有完整的 xpath 支持,您应该使用 lxml 或使用查找、搜索 .attrib 和循环写出完整的逻辑:(

    类似

    root.find("/Departments/orgID").attrib['text']
    ect
    

    自从我使用 ET 已经一年多了,所以我无法为您提供更多帮助:)

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      相关资源
      最近更新 更多