使用ElementTree循环获取多个XML项

0 投票
2 回答
9086 浏览
提问于 2025-04-16 11:02

我正在尝试用elementtree来遍历一个xml文件。这个文件大概长这样:

<items>
  <item>
    <name>Blah</name>
    <price>1234</price>
  </item>
  <item>
    <name>Something</name>
    <price>2345</price>
  </item>
</items>

用elementtree读取这个文件后,我可以这样做:

for element in doc.findall('/items/item/name):
  print element.text

但是我想在一个循环中也获取价格……像这样……

for element in doc.findall('/items/item'):
  print element.name.text
  print element.price.text

……但我做不到。不太确定接下来该怎么做——我需要对每个“元素”再做一次“查找”吗?

非常感谢任何帮助!

2 个回答

2

你可以使用下面的代码来更精确地控制返回的值。

for element in doc.findall('item'): # Get the items out.
    # Iterate thought the list of items(They are in element objects)

    print 'Item' # Yey print stuff out!
    print 'Name: ', element.find('name').text
    print 'Price:', element.find('price').text

这段代码会输出以下内容:

Item
Name: Blah
Price: 1234
Item
Name: Something
Price: 2345

这段代码首先获取所有的项目元素。然后,它会查找价格和名称,并打印出结果。 这段代码确保你总是先打印名称,然后再打印价格。

4

请查看文档(http://docs.python.org/library/xml.etree.elementtree.html)。这里有一个可以运行的例子:

for elem in doc.findall('item'):
   for i in  elem.getchildren():
      print i.text

输出结果:

Blah 1234 Something 2345

在我的代码中,我遍历了XML中的所有项目,并获取了与其子节点关联的文本。

撰写回答