0

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

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

  • 调试时,以与输入中出现的顺序相同的顺序打印数据

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

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

2 回答 2

1

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

于 2009-06-15T21:54:48.723 回答
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使用普通的 ol' Pythondict类型来存储键/值对。Pythondict类型不保证键的顺序。

于 2009-06-15T22:24:10.183 回答