Python - 我的XML包含什么?

时间:2015-02-07 11:11:02

标签: python xml

我是整个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”等)?

1 个答案:

答案 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开始的所有元素节点。实际上,你可以跳过星号,因为.//会做同样的事情。并且./会匹配根目录下一级的元素。