Python xml パーサーを使用して、xml の各ノードのレベルを取得する効率的な方法はありますか? ノードのレベルは、xml をトップダウンで解析しながら終了タグを数えることによっても決定できますが、それについても助けが必要です :)。ありがとう!
質問する
2581 次
3 に答える
4
多分これは最初のアイデアかもしれません:
from xml.etree import ElementTree
from xml.etree.ElementTree import iterparse
level = 0
for (event, node) in iterparse( fileName, ['start', 'end', 'start-ns', 'end-ns'] ):
if event == 'end':
level -= 1
if event == 'start':
level += 1
# do soething with node ...
于 2013-03-01T06:37:31.920 に答える
0
私は常にminidomを使用しており、このようなXMLファイルとのやり取りにはminidomをお勧めします。この目的のために、要素のparentNode属性を使用できます。
import xml.dom.minidom as parser
tree = parser.parse('xml.xml')
#let's say we want the first instance of a tag with an specific name
x = tree.getElementsByTagName('tagname')[0]
level = 0
while x:
x = x.parentNode
level += 1
print(level)
これは、ミニダムドキュメントへのリンクです。
于 2013-03-01T06:46:21.720 に答える
0
「pythonxmlパーサー」とはあなたが意味していると思いますxml.etree
。lxml
この作業を簡単にすることができる他のライブラリ(など)もありますが、この回答によると、このライブラリを使用して親要素にアクセスする簡単な方法はありません。ただし、そこで提示されている回避策(ツリー全体への親のマッピングの作成)は、特定の要素のレベルを決定するのに十分です。
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
# root = ET.fromstring(...) # Alternative
parent_map = dict((c, p) for p in root.getiterator() for c in p)
def level(node):
return level(parent_map[node])+1 if node in parent_map else 0
于 2013-03-01T06:37:39.557 に答える