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

1 投票
1 回答
536 浏览
提问于 2025-04-18 08:51

我在一个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 转换在这里看起来更合理也更简单,具体可以参考:

另外,你也可以看看:

撰写回答