Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用pythonxml.sax获取元素属性列表的顺序?_Python_Xml_Sax - Fatal编程技术网

如何使用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'Python
dict
类型来存储键/值对。Python
dict
类型不能保证键的顺序。

巧合的是,PEP 372中在“未来方向”标题下提到了这一点:“有了标准图书馆提供的有序dict,其他图书馆可能会利用这一优势。例如,ElementTree将来可能会返回保留源文件属性顺序的ODICT。”