python修改xml属性_python解析xml后,节点的属性顺序发生了变化

场景:[d]python解析xml后,节点的属性顺序发生了变化解决方法

[d]python解析xml后,节点的属性顺序发生了变化

本帖最后由 fibbery 于 2012-07-11 15:05:14 编辑

比如说一个xml文件的节点如下:

但是经过解析后,我重新产生一个xml文件,节点就变成了下面的样子

好像是python默认的把节点的属性顺序给排了一下,但是要求是不能改变节点的属性顺序,请教各位帮助一下,不胜感激

我用的是xml.dom.minidom解析。就算我新创建一个节点,设置属性的时候先设置Name再设置ID,结果产生出来的xml文件节点的属性还是ID在Name前面

---------------------------

Double行动:

原帖分数:40

帖子加分:40

分享到:

------解决方案--------------------

看你的样子貌似属性字典被排序了

但是我测试了一下,貌似字典默认不会排序的

贴代码吧,楼主

>>> d = {'Name':'test','ID':'2232'}

>>> d

{'Name': 'test', 'ID': '2232'}

>>> for k,v in d.items():

print k,v

Name test

ID 2232

>>>

------解决方案--------------------

stackoverflow上说用minidom不能规定属性的顺序

http://stackoverflow.com/questions/662624/preserve-order-of-attributes-when-modifying-with-minidom

------解决方案--------------------

测试了一下,还真是不能排顺序,而且查过资料,minidom还真就不能做到你的要求

from xml.dom.minidom import parseString, getDOMImplementation

from collections import OrderedDict

impl = getDOMImplementation()

dom3 = parseString('''''')

newdom = impl.createDocument(None, 'out', None)

queues=dom3.getElementsByTagName("Queue")

root=newdom.documentElement

for queue in queues:

item=newdom.createElement("Queue")

item.setAttribute("Name",queue.getAttribute("Name"))

item.setAttribute("ID",queue.getAttribute("ID"))

# item._attrs=OrderedDict([('one','hello'), ('tow','world'), ('three', 'good')])

root.appendChild(item)

print newdom.toxml()

------解决方案--------------------

collections 中的 OrderedDict 可以按初始化顺序输出,

$ python

Python 2.7.3 (default, Apr 20 2012, 22:44:07)

[GCC 4.6.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> from collections import OrderedDict as dict

>>> d = {'Name':'test','ID':'2232','AAA':'aaa','BBB':'bbb'}

>>> dd = dict(Name='test',ID='2232',AAA='aaa',BBB='bbb')

>>> for k,v in d.items():

... print k,v

...

AAA aaa

Name test

BBB bbb

ID 2232

>>> for k,v in dd.items():

... print k,v

...

AAA aaa

ID 2232

BBB bbb

Name test

>>>,试试看?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值