<p>考虑一下<a href="https://www.w3.org/Style/XSL/" rel="nofollow">XSLT</a>,这是专门为操作和转换XML文件而设计的专用语言。Python的lxml可以运行xslt1.0脚本。具体来说,XSLT维护了可以在模板内运行的<a href="http://www.w3schools.com/xsl/el_sort.asp" rel="nofollow">^{<cd1>}</a>方法:</p>
<pre><code>import lxml.etree as et
# LOAD XML (FROM FILE) AND XSL (FROM STRING)
xml = et.parse('Input.xml')
xslstr = '''<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<! Identity Transform >
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<! Sort Children Text of Nodes >
<xsl:template match="cstat|legal">
<xsl:copy>
<xsl:apply-templates select="*">
<xsl:sort select="." order="ascending" data-type="text"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:transform>'''
xslt = et.fromstring(xslstr)
# TRANSFORM SOURCE TO NEW TREE
transform = et.XSLT(xslt)
newdom = transform(xml)
print(newdom)
# OUTPUT TO FILE
tree_out = et.tostring(newdom, encoding='UTF-8', pretty_print=True, xml_declaration=True)
xmlfile = open('Output.xml','wb')
xmlfile.write(tree_out)
xmlfile.close()
</code></pre>