python + libxml2:根据属性的值对XML节点的元素进行排序

时间:2014-06-06 12:47:53

标签: python xml xml-parsing lxml libxml2

我在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>

如何使用libxml2在python中做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以使用state这种方式对lxml代码的子项进行排序:

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转换在这里更合乎逻辑,更简单,请参阅:

另见:

相关问题