python从xml中提取项目

python从xml中提取项目,python,xml,Python,Xml,我想用python读取一个xml文件,它如下所示: <xml> <project name = "proj1"> <design name = "des1"> <param>para1</param> </design> <design name = "des2"> <param>para4<

我想用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>
但是我如何获得一个特定的项目,比如proj1中的des2中的param?

阅读
etree
,以获得一个列表(带有示例),其中列出了遍历DOM和检索数据所能做的一切。如果您不熟悉它,您可能还想了解它(即使使用此模块,您也可以使用它的子集轻松检索某些元素)。对于您的具体示例,它将是:

root.find('project[@name="proj1"]/design[@name="des2"]/param').text
param = root.xpath(/project[@name="proj1"]/design[@name="des2"]/param/Text()')

就我个人而言,我会使用lxml,而不是原生pythonetree代码。通过这种方式,您可以使用XPath,这使得操作xml更加容易

例如,获取您请求的元素的代码是:

root.find('project[@name="proj1"]/design[@name="des2"]/param').text
param = root.xpath(/project[@name="proj1"]/design[@name="des2"]/param/Text()')

更新:看起来ETree支持完整XPath的一个子集,所以它可以满足@mgibsonbr

有趣的指出的需求,但如果我有多个参数呢?我可以使用root.findall('project[@name=“proj1”]/design[@name=“des2”]/param')并遍历它吗?@Yui当然可以!这将返回一个元素列表,因此您可以像在
中为root中的child所做的那样使用它们。