使用Python

时间:2017-09-07 00:30:56

标签: python xml

我有以下XML:

<xml xmlns="http://xml.org">
    <A>
        <A>One</A>
        <B>Two</B>
        <C>Three</C>
    </A>
    <B>
        <A>One</A>
        <B>Two</B>
        <C>Three</C>
    </B>
    <C>
        <A>One</A>
        <B>Two</B>
        <C>Three</C>
    </C>
</xml>

我正在尝试将A中的子节点排序为B A C,以获得:

<xml xmlns="http://xml.org">
    <A>
        <B>Two</B>
        <A>One</A>
        <C>Three</C>
    </A>
    <B>
        <A>One</A>
        <B>Two</B>
        <C>Three</C>
    </B>
    <C>
        <A>One</A>
        <B>Two</B>
        <C>Three</C>
    </C>
</xml>

我不知道如何解决这个问题,我尝试用以下几行来做这件事:

my_own_order = ['B', 'A', 'C']
order = {key: i for i, key in enumerate(my_own_order)}

for node in f.xpath('//xmlns:xml/xmlns:A/*', namespaces={'xmlns': str(ns[None])}):
    node[:] = sorted(node, key=order)

但这根本没有做任何事情。我正在做我正在做的事情吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

#get all children in a nodelist
nodes=f.xpath('//xmlns:xml/xmlns:A/*', namespaces={'xmlns': str(ns[None])})
#sort nodelist
nodes= sorted(nodes, key=order)
#get parent A node
anode=nodes[0].parent
#remove unsorted children
for node in nodes:
    node.parent.remove(node)
# add sorted children
for node in nodes:
    anode.add(node)