1
我在我的xml中有一些部分需要重新排序,我知道xml不需要重新排序,但這是我需要做的,但可以'弄清楚「正確」的方式來做到這一點。我正在使用lxml並已使用.insert
命令重新排序。我需要重新整理各各<asset type="preview">
,這樣它看起來像這裏面的標籤:Python -lxml重新訂購xml標籤
<asset type="preview">
<territories>
<territory>SE</territory>
</territories>
<data_file role="source">
<locale name="es"/>
<file_name>some_name_nor-preview-sv.mov</file_name>
<size>1715119116</size>
<checksum type="md5">55cd94d051700be34014b2892e925fa1</checksum>
<attribute name="crop.top">25</attribute>
<attribute name="crop.bottom">25</attribute>
<attribute name="crop.left">4</attribute>
<attribute name="crop.right">4</attribute>
<attribute name="image.burned_subtitles.locale">sv</attribute>
<attribute name="image.textless_master">false</attribute>
</data_file>
</asset>
我有時也有多個<asset type="preview">
,有時沒有。此外,有時每個<asset type="preview">
都不包含此處列出的所有標籤。 這是xml的一節,我試圖按照上面的順序重新排序。
<asset type="preview">
<data_file role="source">
<size>1657800204</size>
<file_name>some_name_nor-preview.mov</file_name>
<checksum type="md5">c61dfa7139ab04560cac41cf5ba8a1f2</checksum>
<locale name="es"/>
<attribute name="crop.top">25</attribute>
<attribute name="crop.right">4</attribute>
<attribute name="crop.bottom">25</attribute>
<attribute name="crop.left">4</attribute>
</data_file>
<territories>
<territory>WW</territory>
</territories>
<data_file role="notes">
<size>9642</size>
<file_name>some_name_nor-preview-notes.pdf</file_name>
<checksum type="md5">4d0dc3534cd1d0f9885afbfda9be8b71</checksum>
</data_file>
</asset>
<asset type="preview">
<data_file role="source">
<size>1715119116</size>
<file_name>some_name_nor-preview-sv.mov</file_name>
<checksum type="md5">55cd94d051700be34014b2892e925fa1</checksum>
<locale name="es"/>
<attribute name="image.burned_subtitles.locale">sv</attribute>
<attribute name="crop.top">25</attribute>
<attribute name="crop.right">4</attribute>
<attribute name="image.textless_master">false</attribute>
<attribute name="crop.left">4</attribute>
<attribute name="crop.bottom">25</attribute>
</data_file>
<territories>
<territory>SE</territory>
</territories>
</asset>
<asset type="preview">
<data_file role="source">
<size>1709158524</size>
<file_name>some_name_nor-preview-fi.mov</file_name>
<checksum type="md5">58c5fcfa718393f76cb9b2d8f7c10362</checksum>
<locale name="es"/>
<attribute name="crop.bottom">25</attribute>
<attribute name="crop.top">25</attribute>
<attribute name="crop.left">4</attribute>
<attribute name="image.textless_master">false</attribute>
<attribute name="crop.right">4</attribute>
<attribute name="image.burned_subtitles.locale">fi</attribute>
</data_file>
<territories>
<territory>FI</territory>
</territories>
</asset>
<asset type="preview">
<territories>
<territory>NO</territory>
</territories>
<data_file role="source">
<size>1718632572</size>
<file_name>some_name_nor-preview-no.mov</file_name>
<checksum type="md5">41734d9d8dd4165416a4369f4ce9c8e1</checksum>
<locale name="es"/>
<attribute name="crop.left">4</attribute>
<attribute name="crop.top">25</attribute>
<attribute name="crop.bottom">25</attribute>
<attribute name="image.textless_master">false</attribute>
<attribute name="image.burned_subtitles.locale">no</attribute>
<attribute name="crop.right">4</attribute>
</data_file>
</asset>
<asset type="preview">
<territories>
<territory>DK</territory>
</territories>
<data_file role="source">
<size>1721312028</size>
<file_name>some_name_nor-preview-da.mov</file_name>
<checksum type="md5">919abd17baf680161a220dbae8409918</checksum>
<locale name="es"/>
<attribute name="image.textless_master">false</attribute>
<attribute name="crop.bottom">25</attribute>
<attribute name="image.burned_subtitles.locale">da</attribute>
<attribute name="crop.right">4</attribute>
<attribute name="crop.left">4</attribute>
<attribute name="crop.top">25</attribute>
</data_file>
</asset>
這是我目前「不工作」的代碼,它不是重新排序attribute[@name=
標籤,不知道這是正確的做法:
a = 0
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag='locale'):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/locale")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag='file_name'):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/file_name")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag='size'):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/size")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag='checksum'):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/checksum")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='crop.top']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='crop.top']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='crop.bottom']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='crop.bottom']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='crop.left']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='crop.left']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='crop.right']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='crop.right']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='image.burned_forced_narrative.locale']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='image.burned_forced_narrative.locale']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='image.burned_subtitles.locale']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='image.burned_subtitles.locale']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
for node_search in tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']"):
for element in node_search.iter(tag="attribute[@name='image.textless_master']"):
node_products = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']")[b]
node_type = tree.xpath("//video/assets/asset[@type='preview']/data_file[@role='source']/attribute[@name='image.textless_master']")[b]
node_products.insert(a, node_type)
b = b+1
a = a+1
b = 0
向我們展示你的代碼 – 2014-10-27 15:04:36
我已經更新了問題,包括我當前的代碼。 – speedyrazor 2014-10-27 15:14:22
可能的重複:http://stackoverflow.com/questions/25039195/python-lxml-write-to-file-in-predefined-order – 2014-10-27 15:27:32