python + libxml2:根据属性值排序XML节点元素
我在一个XML文档中有以下这个节点:
<state>
<soso value="3"/>
<good value="1"/>
<bad value="2"/>
<unknown value="0"/>
</state>
我需要根据这个节点里每个元素的value
属性的值来排序,这样最终的结果应该是这样的:
<state>
<unknown value="0"/>
<good value="1"/>
<bad value="2"/>
<soso value="3"/>
</state>
请问在Python中,如何使用libxml2来实现这个排序呢?
1 个回答
3
你可以用 lxml
这个工具来给 state
标签的子元素排序,方法如下:
from lxml import etree
data = """
<state>
<soso value="3"/>
<good value="1"/>
<bad value="2"/>
<unknown value="0"/>
</state>
"""
state = etree.fromstring(data)
state[:] = sorted(state, key=lambda x: int(x.attrib.get('value')))
print etree.tostring(state)
输出结果是:
<state>
<unknown value="0"/>
<good value="1"/>
<bad value="2"/>
<soso value="3"/>
</state>
需要注意的是,使用 XSLT
转换在这里看起来更合理也更简单,具体可以参考:
另外,你也可以看看: