我有一个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'
我做错了什么?我该如何解决?
谢谢!
答案 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'