使用Python和xml.etree解析XML

时间:2014-08-18 14:27:12

标签: python xml

我有一个XML文件,我想用Python的xml.etree读取一些数据。

假设XML文件是这样的:

<a>
   <b>
      <c>
         <d>This is the text I want to retrieve</d>
      </c>
   </b>
</a>

我做的是这样的:

document = ElementTree.parse('file.xml')
dToFind = document.find('d')
print(dToFind.text)

但它给了我以下错误:

    print(dToFind.text)
AttributeError: 'NoneType' object has no attribute 'text'

我做错了什么?我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用XPATH for more sophesticated parsing结合find来递归查找节点

在这种情况下:

dToFind = document.find('.//d')

文档指出使用xpath进行更有条理的解析 - 会鼓励您研究它。

样本

>>> from xml.etree import ElementTree as ET
>>> content = """<a>
...    <b>
...       <c>
...          <d>This is the text I want to retrieve</d>
...       </c>
...    </b>
... </a>
... """
>>> 
>>> xx = ET.fromstring(file) #you would be doing .parse()
>>> xx.find('d') #Returns None, as it finds only first level children
>>> xx.find('.//d')
<Element 'd' at 0xf1b550>
>>> d = xx.find('.//d')
>>> d.text
'This is the text I want to retrieve'