6

私はPythonを初めて使用し、xmlの解析について理解したいと思います。XMLノードセットをウォークするジェネリックプログラムを作成する方法の優れた例や説明を見つけることができませんでした。

xmlスキーマに関する情報がなくても、名前と値ですべての要素と属性を分類および識別できるようにしたいと考えています。特にタグ名やテキストによる要素や属性の呼び出しに依存したくありません。

誰かが私を正しい方向に向けてくれませんか?

ありがとう

アップデート:

尋ねられた具体的な質問は、「スキーマについての深い知識がなくても、XMLドキュメントのルートノードからすべてのノードを一般的にどのように再帰させるか」でした。

当時、Pythonに不慣れで、他の多くの言語でその操作を実行する方法を理解していたので、DOMをトラバースするために名前付きノードに依存しない実際の例に戸惑いました。これは私が望んでいたことではありません。 。

このスレッドの情報が実際に役立つので、これが質問を明確にすることを願っています。

4

2 に答える 2

6

PythonヘルプでElementTreeのドキュメントを確認してください

そのページの基本的なコードのスタブは次のとおりです。

    import xml.etree.ElementTree as ET
    tree = ET.parse(filename)
    root = tree.getroot()
    for child in root:  
      child.tag, child.attrib

for child in root:子供がなくなるまで、再帰的に下向きに走り続けることができます。

于 2012-11-20T03:04:42.623 に答える
5

cElementTreeを使用します。PythonバージョンのElementTreeよりも15〜20倍高速で、使用するメモリは2〜5倍少なくなります。 http://effbot.org/zone/celementtree.htm

import xml.etree.cElementTree as ET
tree = ET.parse('test.xml')
for elem in tree.getiterator():
    if elem.tag:
        print 'my name:'
        print '\t'+elem.tag
    if elem.text:
        print 'my text:'
        print '\t'+(elem.text).strip()
    if elem.attrib.items():
        print 'my attributes:'
        for key, value in elem.attrib.items():
            print '\t'+'\t'+key +' : '+value
    if list(elem): # use elem.getchildren() for python2.6 or before
        print 'my no of child: %d'%len(list(elem))
    else:
        print 'No child'
    if elem.tail:
        print 'my tail:'
        print '\t'+'%s'%elem.tail.strip()
    print '$$$$$$$$$$'
于 2012-11-20T07:14:38.207 に答える