2009-06-15 1 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ソースと同じ順序で名前と値の2つのパラレルリストになります)。

1

残念ながら、PythonのSax実装では不可能です。

Pythonライブラリ(V2.5)からこのコードは、あなたが知る必要があるすべてを説明します:

StartElementハンドラは、プレーン老いのPython dictを使用しています AttributeImpl仕様を実装するオブジェクトを渡され
class AttributesImpl: 

    def __init__(self, attrs): 
     """Non-NS-aware implementation. 
     attrs should be of the form {name : value}.""" 

     self._attrs = attrs 

キーと値のペアを格納するための型。 Python dictタイプはキーの順序を保証しません。

+1

http://www.python.org/dev/peps/pep-0372/偶然にも、これは、 "将来の方向"という見出しの下でOrderedDictのPEP 372に記載されています。 "例えば、ElementTreeは、今後ソースファイルの属性の順序を保持するodictsを返すことができます。 – bernie

関連する問題