<p>此示例演示:</p>
<ul>
<li>如何读入XMl文件</li>
<li>元素是一个列表,并且可以这样操作</li>
<li>如何根据可匹配子字符串的预定义顺序对列表排序</li>
<li>如何写出XML文件</li>
</ul>
<pre class="lang-python prettyprint-override"><code>from lxml import etree
import re
# Parse the XML and find the root
with open('input.xml') as input_file:
tree = etree.parse(input_file)
root = tree.getroot()
# Find the list to sort and sort it
some_arbitrary_expression_to_find_the_list = '.'
element_list = tree.xpath(some_arbitrary_expression_to_find_the_list)[0]
predefined_order = [
'Protocol',
'StudyEventDef',
'FormDef',
'ItemGroupDef',
'ItemGroupData',
'ItemDef',
'CodeList',
'ClinicalData']
filter = re.compile(r'Element(.*)at0x.*')
element_list[:] = sorted(
element_list[:],
key = lambda x: predefined_order.index(filter.match(x.tag).group(1)))
# Write the XML to the output file
with open('output.xml', 'w') as output_file:
output_file.write(etree.tostring(tree, pretty_print = True))
</code></pre>
<p>样本输入:
在</p>
^{pr2}$
<p>输出:
在</p>
<pre><code><stuff>
<ElementProtocolat0x3803048/>
<ElementStudyEventDefat0x3803108/>
<ElementFormDefat0x3803248/>
<ElementFormDefat0x38036c8/>
<ElementItemGroupDefat0x38032c8>Random Text</ElementItemGroupDefat0x38032c8>
<ElementItemGroupDataat0x38035c8><tag1><tag2 attr="random tags"/></tag1></ElementItemGroupDataat0x38035c8>
<ElementClinicalDataat0x3803408/>
</stuff>
</code></pre>