如何在python中使用属性解析XML?

时间:2014-04-21 11:56:02

标签: python xml

我有一个xml,它有很多行。对于特定的给定属性id,应查询元素名称和价格值。例如,我的树看起来像:

<menu>
 <food id="1">
  <name>Pesto Chicken Sandwich</name>
  <price>$7.50</price>
 </food>
 <food id="2">
  <name>Chipotle Chicken Pizza</name>
  <price>$12.00</price>
 </food>
 <food id="3">
  <name>Burrito</name>
  <price>$6.20</price>
 </food>
</menu>

如何获取特定ID(1或2或3)的名称和价格值?

我尝试使用minidom进行解析。我的代码是:

from xml.dom import minidom
xmldoc = minidom.parse('D:/test.xml')
nodes = xmldoc.getElementsByTagName('food')
for node in nodes:
 if node.attributes['id'].value == '1':
     ????????????????????

我无法检索名称和价格标签值。我检查了很多例子,没有人满意。

工作了。代码如下:

import xml.etree.ElementTree as ET
tree = ET.parse('D:/test.xml')
root = tree.getroot()
for child in root:
 testing  = child.get('id')
 if testing == '3':
    print child.tag, child.attrib
    print child.find('name').text
    print child.find('price').text

1 个答案:

答案 0 :(得分:1)

查看标准etree library。它允许您将xml文件解析为名为ElementTree的Python对象。然后,您可以在此对象上调用各种方法,例如.findall("./food/name").

这可能会让你开始:

import xml.etree.ElementTree as ET
tree = ET.parse('D:/test.xml')
root = tree.getroot()

def get_info(food_id):
    for child in root.findall("*[@id='{0}']//".format(food_id)):
        print(child.text)

get_info(1)

输出:

Pesto Chicken Sandwich
$7.50