如何在python中解析带有属性的XML?

How do I parse XML with attribute in python?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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解析。我的代码是:

1
2
3
4
5
6
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':
     ????????????????????

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

它奏效了。代码如下:

1
2
3
4
5
6
7
8
9
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


退房Etree’s the标准库。你觉得它allows Python对象到XML文件的一个elementtree into an。You can then this对象的各种在线呼叫的方法,.findall("./food/name").such asP></

这会让你开始:P></

1
2
3
4
5
6
7
8
9
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)

输出:P></

1
2
Pesto Chicken Sandwich
$7.50