tree.write missing element after sorting based on attribute



I want sort the attribute based on "distName". The problem is after sorting, the output xml file missing the first line and the element.


This is my code:



from lxml import etree
import sys
cmdargs = str(sys.argv)
tree = etree.parse(str(sys.argv[1]))
root = tree.getroot()
data = []
for Object in root[0].findall('{raml20.xsd}managedObject'):
key = Object.attrib['distName']
data.append((key, Object))
data.sort()
root[0][:] = [item[-1] for item in data]
tree.write(str(sys.argv[1])+".sorted")


xml file to be sorted:



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE raml SYSTEM 'raml20.dtd'>
<raml version="2.0" xmlns="raml20.xsd">
<cmData type="actual">
<header>
<log dateTime="2015-01-04T04:35:40" action="created" appInfo="ActualExporter">InternalValues are used</log>
</header>
<managedObject class="WBTS" version="RN6.0" distName="PLMN-PLMN/RNC-2" id="101447">
<p name="VCI">0</p>
<p name="VPI">654390</p>
</managedObject>
<managedObject class="RNC" version="RN6.0" distName="PLMN-PLMN/RNC-1" id="10144701">
<p name="name">SOME</p>
<p name="ipAddress">127.0.0.1</p>
</managedObject>
</cmData>
</raml>


Output xml file after sorting:



<!DOCTYPE raml SYSTEM "raml20.dtd">
<raml xmlns="raml20.xsd" version="2.0">
<cmData type="actual">
<managedObject class="RNC" version="RN6.0" distName="PLMN-PLMN/RNC-1" id="10144701">
<p name="name">SOME</p>
<p name="ipAddress">127.0.0.1</p>
</managedObject>
<managedObject class="WBTS" version="RN6.0" distName="PLMN-PLMN/RNC-2" id="101447">
<p name="VCI">0</p>
<p name="VPI">654390</p>
</managedObject>
</cmData>
</raml>


Does anyone can help me to solve this issue? Thanks!


No comments:

Post a Comment