PythonでXMLファイルのDOMインスタンス(ツリー)を取得する方法を知っている人はいませんか。私は、要素と属性を異なる順序で持つ可能性のある2つのXML文書を互いに比較しようとしています。どうすればいい?XML文書のDOMツリーの取得
答えて
個人的には、可能であればelementtreeから始めることをお勧めします(Pythonの標準ライブラリ、またはlxmlの実装に含まれているCの実装が望ましいが、それは高速性の問題である)。これは標準に準拠したDOMではありませんが、Pythonicでより手軽な方法で同じ情報を保持します。 xml.etree.ElementTree.parse
を呼び出すことから始めることができます。これはXMLソースを取り、要素ツリーを返します。両方のソースでそれを行い、各要素ツリーでgetroot
を使用してルート要素を取得し、ルート要素から再帰的に要素を比較します。
エレメントの子要素は、標準DOMと同様にエレメントツリー内にシーケンスを形成します。つまり、その順序は重要であるとみなされます。 Pythonのセットを作るのは簡単です(あるいは、順序はそうではありませんが、繰り返しが重要な場合は、何らかの種類の「複数セット」という努力をしています)。一意性が保証され、秩序が意味的に関連しない、所与の要素の属性にとってはさらに簡単です。
要素ツリーのような別のコンテナではなく、標準DOMが必要な特定の理由がありますか、要素ツリーがOKになるようにDOMという用語を一般的な意味で使用していますか?
これまでは、PyRXPを使用しても良い結果が得られました。これは、ElementTreeよりもはるかに単純で明瞭な表現を使用しています。しかし、それは何年も何年も前でした。 PyRXPが今日lxmlやcElementTreeとどう比較されたかについての最近の経験はありません。
XML文書インスタンス、解析されたDOMツリーの比較ナイーブは動作しません比較するため。大きな子要素の順序がある場合は
- :あなたはおそらく、再帰的のような特定の基準に基づいていくつかの他のノードとその子、ノードとノードとその子・ノードを比較し、独自のNodeComperatorを実装する必要があります?
- テキストコンテンツの空白が重要なのはいつですか?
- 一部の要素にはデフォルト値があり、パーサーによって適用されていますか?
- 万一実体参照を比較
Minidomのために展開されたファイルを解析するための良い出発点であると使いやすいです。しかし、特定のアプリケーションの比較関数の実際の実装は、あなたが行う必要があります。
- 1. xmlタグSimpleXMLとDOM文書
- 2. XMLとツリー、ツリーを取得する
- 3. XMLとDOMの#text出力を取得
- 4. XML文書からデータを取得
- 5. id xml文書で要素を取得
- 6. TypeScript:構文ツリーを取得
- 7. JDOM(ConcurrentModificationException)を使用したXML/DOMツリー書き換えの問題
- 8. DOM文書のxmlファイルへのデータの追加
- 9. ECDSA証明書でURLからXML文書を取得する
- 10. DOM(XML)オブジェクトの文書を(物理的に)印刷する - PHP?
- 11. 文書DOMツリーのすべての単語をjavascriptで集める
- 12. XML DOMオブジェクトから完全なXMLソースを取得する
- 13. XQueryでXML文書の場所を取得する
- 14. Nokogiri XML文書のサイズを取得する
- 15. xmlの文書からタイトルとpubDate要素を取得
- 16. JavaのXML DOMツリーを再帰的にトラバースする
- 17. 再帰DOMツリー
- 18. Java DOMを使用したXMLノードのテキスト値の取得
- 19. Java DOM XML解析::要素属性値の取得
- 20. タグ内のテキストを取得するXML DOM
- 21. XML文書からオブジェクトを取得する方法は?
- 22. jQuery.find()とXML文書でHTMLUnknownElementを取得する
- 23. XML文書のI18N
- 24. XML文書のアウトラインウィンドウ
- 25. XMLから要素ツリーを取得する
- 26. qtでXMLを解析してツリー構造を取得
- 27. dom xml要素でcdata(html)を取得する
- 28. XML DOMリストから属性値を取得
- 29. php DOM文書の使い方は?
- 30. PHPのXMLのDOM - 更新XMLのDOM要素
私はminidomを調べましたが、解析されたファイルからDOMツリーを取得する方法に関するドキュメントには何も情報はありません。私は順序が重要ではないように2本の木を比較したいと思う。これをどうやって行うのか考えていますか? – Dave
Python 2.6のminidom documeentationは、ファイルからDOMを取得する例を示しています(何かの後にいますか?) from xml.dom。minidom import parse、parseString dom1 = parse( 'c:\\ temp \\ mydata.xml')#名前でXMLファイルを解析する – Mark