如何使用pythonxml.sax获取元素属性列表的顺序?
如何获取元素属性列表的顺序?这对于最终处理不是完全必要的,但最好:如何使用pythonxml.sax获取元素属性列表的顺序?,python,xml,sax,Python,Xml,Sax,如何获取元素属性列表的顺序?这对于最终处理不是完全必要的,但最好: 在筛选器中,不要对属性列表进行无偿的重新排序 调试时,按输入中显示的顺序打印数据 这是我当前的属性处理器,它像字典一样传递属性 class MySaxDocumentHandler(xml.sax.handler.ContentHandler): def startElement(self, name, attrs): for attrName in attrs.keys():
- 在筛选器中,不要对属性列表进行无偿的重新排序
- 调试时,按输入中显示的顺序打印数据
class MySaxDocumentHandler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
for attrName in attrs.keys():
...
我不认为SAX可以实现这一点(至少目前Python支持这一点)。可以通过将解析器对象的
ordered_attributes
属性设置为True
(然后属性是两个平行列表,一个是名称,一个是值,顺序与XML源代码中的顺序相同)。不幸的是,在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
类型不能保证键的顺序。巧合的是,PEP 372中在“未来方向”标题下提到了这一点:“有了标准图书馆提供的有序dict,其他图书馆可能会利用这一优势。例如,ElementTree将来可能会返回保留源文件属性顺序的ODICT。”