【问题标题】:How to order xml element attributes in Python?如何在 Python 中订购 xml 元素属性?
【发布时间】:2011-03-21 17:25:21
【问题描述】:

在将 xml 文件解析为 Python ElementTree 时,属性的顺序会混淆,因为 Python 将属性存储在字典中。

如何更改字典中属性的顺序?

【问题讨论】:

  • 哎呀。这个问题已经被问过了:link

标签: python xml elementtree


【解决方案1】:

XML属性按定义是无序的1,比较官方标准的paragraph 3.1

1从技术上讲,属性列表是有序的,但顺序并不重要,即编写器、转换器和解析器可以随意切换。

【讨论】:

    【解决方案2】:

    如您所说,您的自我回答冗长而繁琐。它不需要。如果 (1) 有超过 10 个键 (2) 字典的键比预期的少,它也会失败。

    试试这个;它更简单:

    >>> ordered_keys = ('z', 'y', 'e', 'x', 'w') # possible keys, in desired order
    

    注意:以上行是所有需要的设置。

    >>> dic = {'z':'a', 'y':'b', 'x':'c', 'w':'d'} # actual contents of a dictionary
    >>> for k in ordered_keys:
    ...     if k in dic: # avoid trouble if a key is missing
    ...         print k, dic[k]
    ...
    z a
    y b
    x c
    w d
    >>>
    

    【讨论】:

    • 谢谢约翰!是的,仅仅一天后,我开始在我的代码中看到许多缺陷。 :\
    【解决方案3】:

    XML 没有定义节点属性的任何顺序。所以行为很好。 如果您对属性的顺序做出假设,那么您的假设是错误的。 没有排序,您不能期望任何类型的属性排序。所以你的问题是无效的。

    【讨论】:

      【解决方案4】:

      您不能在字典内部更改属性的顺序。除非您进行一些花哨的黑客攻击,否则这是不可能的。

      因此,解决方案是按照您想要的顺序手动访问属性,或者创建一个键/项目列表并按照您想要的方式排序。

      【讨论】:

      • "你会看到订单丢失了" -- 字典没有订单丢失。
      猜你喜欢
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多