如何使用Python xml.sax获取元素属性列表的顺序?
我该如何获取一个元素属性列表的顺序?虽然这对最终处理不是绝对必要,但有这个顺序会更好:
在过滤时,不要随意改变属性列表的顺序
在调试时,打印数据时能和输入的顺序一致
这是我目前的属性处理器,它对属性进行了类似字典的处理。
class MySaxDocumentHandler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
for attrName in attrs.keys():
...
2 个回答
1
很遗憾,在Python的Sax实现中,这是不可能的。
下面这段来自Python库(版本2.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
类型不保证键的顺序。
1
我觉得用SAX(至少是现在Python支持的那种)是做不到的。不过可以用expat来实现。你只需要把解析器对象的ordered_attributes
属性设置为True
(这样属性就会变成两个平行的列表,一个是名字,一个是值,顺序和XML源文件里的一样)。