如何使用Python xml.sax获取元素属性列表的顺序?

时间:2009-06-15 21:33:53

标签: python xml sax

如何获取元素属性列表的顺序?对于最终处理来说并不是完全必要的,但它很高兴:

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

  • 调试时
  • 按照输入中显示的顺序打印数据

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不幸的是,在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类型不保证密钥的顺序。