python从xml中提取项目

时间:2013-02-22 08:15:30

标签: python xml

我想在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?

2 个答案:

答案 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

所指出的那样