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

0 投票
2 回答
2100 浏览
提问于 2025-04-15 12:16

我该如何获取一个元素属性列表的顺序?虽然这对最终处理不是绝对必要,但有这个顺序会更好:

  • 在过滤时,不要随意改变属性列表的顺序

  • 在调试时,打印数据时能和输入的顺序一致

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

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源文件里的一样)。

撰写回答