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")

しかし、特定のアイテムを取得するにはどうすればよいですか?

4

2 に答える 2

3

DOMをトラバースしてデータを取得するために実行できるすべてのリスト(例を含む)については、ドキュメントをお読みください。xpathに慣れていない場合は、xpathetreeについても読むことをお勧めします(このモジュールはxpathを完全にはサポートしていませんが、そのサブセットを使用していくつかの要素を簡単に取得できます)。具体的な例としては、次のようになります。

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

個人的には、ネイティブのpythonETreeコードではなくlxmlを使用します。このようにして、XPathを使用できます。これにより、xmlの操作がはるかに簡単になります。

たとえば、要求している要素を取得するためのコードは次のようになります。

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

更新:ETreeは完全なXPathのサブセットをサポートしているように見えるので、@mgibsonbrが指摘しているように要件には十分です。

于 2013-02-22T08:32:02.383 に答える