我想在python中读取一个xml文件,它看起来像这样:
<xml>
<project name = "proj1">
<design name = "des1">
<param>para1</param>
</design>
<design name = "des2">
<param>para4</param>
</design>
</project>
<project name = "proj2">
<design name = "des2">
<param>para2</param>
</design>
</project><project name = "proj3">
<design name = "des3">
<param>para3</param>
</design>
</project>
</xml>
我想使用xml.etree.ElementTree
我可以阅读所有这样的项目
tree = ET.parse(path)
root = tree.getroot()
for child in root:
print child.get("name")
但是如何获得特定项目,让我们在proj1中的des2中说param?
答案 0 :(得分:3)
为etree
读取the docs以获取可以遍历DOM并检索数据的所有操作的列表(带有示例)。您可能还想阅读xpath,如果您不熟悉它(即使这个模块does not fully support it,您可以使用它的一个子集来轻松检索某些元素)。对于您的具体示例,它将是:
root.find('project[@name="proj1"]/design[@name="des2"]/param').text
答案 1 :(得分:2)
我个人使用lxml而不是本机python ETree代码。通过这种方式,您可以使用XPath,这使得操作xml变得更加容易。
例如,获取您要求的元素的代码是:
param = root.xpath(/project[@name="proj1"]/design[@name="des2"]/param/Text()')
更新:看起来ETree支持完整XPath的子集,因此它足以满足您的要求,如@mgibsonbr
所指出的那样