1

tar.gz ファイル (フラット化) に入れたいファイルのディレクトリ構造を含む xml ファイルがあります。

xml を解析して各ファイルのパスを抽出するにはどうすればよいですか?

現在、lxml を使用して、次のようなパスを見つけています。

paths = []
for case in root.iter('case'):
    for language in case.iter('language'):
        for result in language.iter('result'):
            for file in result.iter('file'):
                paths.append('/'.join([node.get('id') for node in [case, language, result, file]]))

しかし、これは少しハードコーディングされすぎているように感じられ、構造が変わるとうまく機能しません。

root.iter('file') で各ファイル ノードを見つけることができますが、各ノード/ファイルのすべての親/ディレクトリを取得するにはどうすればよいですか? または、これを(完全に?)別の方法で行う必要がありますか?

xml は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<files batch="regular">
    <case id="case_10_some_description">
        <language id="english">
            <result id="images">
                <file id="screenshot_1.png"/>
                <file id="screenshot_2.png"/>
                <file id="screenshot_3.png"/>
                <file id="screenshot_4.png"/>
                <file id="screenshot_5.png"/>
                <file id="screenshot_6.png"/>
            </result>
        </language>
    </case>
    <case id="case_12_some_description">
        <language id="english">
            <result id="images">
                <file id="screenshot_1.png"/>
                <file id="screenshot_2.png"/>
                <file id="screenshot_3.png"/>
            </result>
        </language>
    </case>
</files>

そして、これはファイルです:

regular/case_10_some_description/english/images/screenshot_1.png
regular/case_10_some_description/english/images/screenshot_2.png
regular/case_10_some_description/english/images/screenshot_3.png
regular/case_10_some_description/english/images/screenshot_4.png
regular/case_10_some_description/english/images/screenshot_5.png
regular/case_10_some_description/english/images/screenshot_6.png
regular/case_12_some_description/english/images/screenshot_1.png
regular/case_12_some_description/english/images/screenshot_2.png
regular/case_12_some_description/english/images/screenshot_3.png
4

2 に答える 2

1

このファイルスキーマを自分で作成しますか? あなたがそれを変えることができるなら、私は間違いなくそうします。次のようなものを作ってみてください:

<?xml version="1.0" encoding="UTF-8"?>
<Directory id="regular">
    <Directory id="case_10_some_description">
        <Directory id="english">
            <Directory id="images">
                <file id="screenshot_1.png"/>
                <file id="screenshot_2.png"/>
                <file id="screenshot_3.png"/>
                <file id="screenshot_4.png"/>
                <file id="screenshot_5.png"/>
                <file id="screenshot_6.png"/>
            </Directory>
        </Directory>
    </Directory>
    <Directory id="case_12_some_description">
        <Directory id="english">
            <Directory id="images">
                <file id="screenshot_1.png"/>
                <file id="screenshot_2.png"/>
                <file id="screenshot_3.png"/>
            </Directory>
        </Directory>
    </Directory>
</Directory>

タグが同じ意味を持つ場合は、常に同じ名前を付けてください。おそらくタグよりも異なる属性を使用すると、解析が容易になります

于 2013-09-04T09:15:22.447 に答える