在Python中按属性的自定义顺序保存XML

时间:2019-01-04 06:56:07

标签: python xml sorting encoding

我正在尝试获取XML属性的特定顺序。

给出

<OKV s="*****" r="*****" a="*****" g="****" m="*****" e="****" d="****" i="****" n="****" v="1"/>

必填:

<OKV v="1" n="****" i="****" d="****" e="****" m="*****" g="****"  a="*****" r="*****" s="*****"/>

我正在尝试用Python实现。

到目前为止,当我使用xml库时。

import xml.etree.ElementTree as ET
tree = ET.parse('adhar.xml')

但是它一直以这种格式读取, 请告诉我们如何更改订单。 正如我在打开文件时在Internet Explorer中正确读取的信息一样,但是在读取文件或在Chrome中查看文件时却出现了反向顺序。

2 个答案:

答案 0 :(得分:1)

对于此特定的xml字符串,您可以使用xmltodict(与pip install xmltodict一起安装)。这会将xml数据转换为python字典。使用以下内容将颠倒OKV条目的顺序:

import xmltodict
import collections
xml_data = '<OKV s="*****" r="*****" a="*****" g="****" m="*****" e="****" d="****" i="****" n="****" v="1"/>'
xml_data_parsed = xmltodict.parse(xml_data)
xml_data_parsed["OKV"] = collections.OrderedDict(reversed(list(xml_data_parsed["OKV"].items())))
xml_data = xmltodict.unparse(xml_data_parsed)

如果要重新排序的零件嵌入较大的xml文档中,则必须选择更深的嵌套键才能到达例如OKV

答案 1 :(得分:0)

尝试使用lxml解析xml文件。根据{{​​3}}的建议,它可能有助于按适当的顺序获取属性。