2009-06-15 50 views
0

如何獲取元素屬性列表的順序?這不是最終的處理完全必要的,但它是很好的:如何使用Python xml.sax獲取元素屬性列表的順序?

  • 在過濾器中,而不是無償重新排序的屬性列表

  • 在調試時,打印數據以相同的順序,因爲它出現在輸入

這是我目前的屬性處理器,它執行字典般的屬性傳遞。

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

回答

1

我不認爲它可以用SAX完成(至少目前由Python支持)。可以使用expat,將分析器對象的ordered_attributes屬性設置爲True(屬性是兩個並行列表,即名稱和值之一,順序與XML源中的順序相同)。

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規範,它採用的是純醇」的Python dict對象鍵入以存儲鍵/值對。 Python dict類型不保證鍵的順序。

+1

http://www.python.org/dev/peps/pep-0372/巧合的是,在Prid 372中,OrderedDict在「未來方向」標題下提到了這件事:「隨着有序字典在標準庫,其他庫可能會利用它,例如,ElementTree可能會在將來返回保留源文件屬性排序的odicts。「 – bernie 2009-06-15 22:37:35