【问题标题】:How can I get the order of an element attribute list using Python xml.sax?如何使用 Python xml.sax 获取元素属性列表的顺序?
【发布时间】:2009-06-15 21:33:52
【问题描述】:

如何获取元素属性列表的顺序?最终处理并非完全必要,但很高兴:

  • 在过滤器中,不要无缘无故地重新排序属性列表

  • 调试时,按照输入中出现的顺序打印数据

这是我当前的属性处理器,它对属性进行类似字典的传递。

class MySaxDocumentHandler(xml.sax.handler.ContentHandler):
    def startElement(self, name, attrs):
        for attrName in attrs.keys():
            ...

【问题讨论】:

    标签: python xml sax


    【解决方案1】:

    我认为它不能用 SAX 完成(至少目前 Python 支持)。可以使用expat 来完成,将解析器对象的ordered_attributes 属性设置为True(这些属性是两个并行列表,一个名称和一个值,其顺序与XML 源中的顺序相同) .

    【讨论】:

      【解决方案2】:

      不幸的是,这在 Sax 的 Python 实现中是不可能的。

      Python 库 (v2.5) 中的这段代码告诉你所有你需要知道的:

      class AttributesImpl:
      
          def __init__(self, attrs):
              """Non-NS-aware implementation.
              attrs should be of the form {name : value}."""
      
              self._attrs = attrs
      

      StartElement 处理程序传递了一个实现 AttributeImpl 规范的对象,该规范使用普通的 Python dict 类型来存储键/值对。 Python dict 类型不保证键的顺序。

      【讨论】:

      • python.org/dev/peps/pep-0372 巧合的是,PEP 372 for OrderedDict 在“未来方向”标题下提到了这一点:“随着标准库中有序 dict 的可用性,其他库可能会利用它. 例如,ElementTree 可以在将来返回保留源文件属性顺序的 odict。"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2019-07-13
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多