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