【问题标题】:How to preserve order of attributes when am modifying value in xml configuration file?修改xml配置文件中的值时如何保留属性顺序?
【发布时间】:2019-05-26 03:12:29
【问题描述】:

修改xml配置文件的属性时,属性的顺序会发生变化。

Before modifying xml: <connection user="testing" intervalInSeconds="50" versionUpdates="10" />

After modifying xml: <connection intervalInSeconds="50" user="testing" versionUpdates="10" />

如何在 python 3 中保持属性的顺序?

代码:

import xml.etree.ElementTree as ET
tree = ET.parse('file path')
root = tree.getroot()

# modifying an attribute
for elem in root.iter('connection'):

    elem.set('versionUpdates', '10')

tree.write('file path', encoding="UTF-8", xml_declaration = True)

【问题讨论】:

    标签: xml python-3.x xml-parsing


    【解决方案1】:

    按照以下方式进行操作,可以维持秩序 - 不知道为什么按照自己的方式做事不会:

    mystr = """
    <connection user="testing" intervalInSeconds="50" versionUpdates="10" />
    """
    
    from lxml import etree
    root = etree.fromstring(mystr)
    for elem in root.iter('connection'):
        elem.set('versionUpdates', '20') #note: I changed it to '20', just to check
    print(etree.tostring(root, pretty_print=True))
    

    输出:

    b'<connection user="testing" intervalInSeconds="50" versionUpdates="20"/>\n'
    

    所以进行了修改,但保持了秩序。不确定它是否有助于您的具体情况,但它可能是一种选择。

    【讨论】:

    • 您正在使用 lxml。他正在使用标准的 ElementTree。 ElementTree 不保留属性的顺序。 lxml 可以。
    • @George - 因为我不经常使用 ElementTree(如果有的话),我没有意识到 ElementTree 不保留属性的顺序!每天学习新东西...谢谢。
    • 更新:从 Python 3.8.0 开始,这应该不再适用:github.com/python/cpython/commit/…
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多