2

我想在 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 中的参数?

4

2 回答 2

3

阅读文档etree获取遍历 DOM 和检索数据可以做的所有事情的列表(带有示例)。您可能还想阅读有关xpath的内容,以防您不熟悉它(即使此模块不完全支持它,您也可以使用它的子集轻松检索一些元素)。对于您的具体示例,它将是:

root.find('project[@name="proj1"]/design[@name="des2"]/param').text
于 2013-02-22T08:31:23.047 回答
2

我个人会使用 lxml 而不是原生的 python ETree 代码。这样您就可以使用 XPath,这使得操作 xml 变得更加容易。

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

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

更新:看起来 ETree 支持完整 XPath 的子集,因此正如@mgibsonbr 指出的那样,它足以满足您的要求

于 2013-02-22T08:32:02.383 回答