我是整个Python世界的新手,但我们决定从学习如何处理开放数据格式开始,主要是为初学者提供XML。
我遇到了一个问题,我无法弄清楚如何获得已解析的.XML文件的概述。
我正在关注的例子让我这样做:
from xml.etree.ElementTree import parse
doc = parse('rt22.xml')
for bus in doc.findall('bus'):
这意味着解析我自己写的.XML,然后,在这个例子中,开始寻找具有特定名称的元素。
这个例子知道XML文件中有一个叫做“bus”的东西,但是现在我找到并解析了我自己的XML文件,我不知道它包含什么。
如果我只是用texteditor打开它,我会看到这个:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<TilOgFraflytninger>
<row>
<TilOgFraflytningId>1</TilOgFraflytningId>
<LejemaalId>1</LejemaalId>
<AfdId>1</AfdId>
<SelId>1</SelId>
<TilFlyttet>1954-08-01T00:00:00</TilFlyttet>
<FraFlyttet>2010-05-15T00:00:00</FraFlyttet>
</row>
<row>
<TilOgFraflytningId>2</TilOgFraflytningId>
<LejemaalId>1</LejemaalId>
<AfdId>1</AfdId>
<SelId>1</SelId>
<TilFlyttet>2010-06-15T00:00:00</TilFlyttet>
<FraFlyttet>2013-11-28T00:00:00</FraFlyttet>
</row>
</TilOgFraflytninger>
但是如何在不必在文本编辑器中打开XML的情况下获取该信息(称为“AfdId”等)?
答案 0 :(得分:2)
我想到了两种方式:
首先,the documentation显示了iter
函数的示例,正如Jongware所指出的那样:
>>> for neighbor in root.iter('neighbor'):
... print neighbor.attrib
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
请注意,iter
函数采用可选的tag
参数(在本例中为'neighbor'
),用于过滤迭代的内容。如果省略,它将通过从根开始的所有节点进行DFS。
您还可以使用XPath syntax来匹配所有元素,例如:
elems = root.findall('.//*') # returns a list
for e in elems:
print(e.tag)
将匹配从root
开始的所有元素节点。实际上,你可以跳过星号,因为.//
会做同样的事情。并且./
会匹配根目录下一级的元素。