我有以下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)
但这根本没有做任何事情。我正在做我正在做的事情吗?任何帮助表示赞赏。
答案 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)