使用python xml解析器有没有一种有效的方法来获取xml中每个节点的级别?节点的级别也可以通过在解析xml自上而下的情况下计算结束标记来确定,但是,我也需要帮助:)。谢谢!
答案 0 :(得分:3)
也许这可能是一个初步的想法:
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 ...
答案 1 :(得分:0)
我假设“python xml解析器”你的意思是xml.etree
。还有其他库(例如lxml
)可以使这项工作更容易,但根据this answer,使用此库访问父元素没有简单的方法。但是,那里提供的解决方法(创建父项到整个树的映射)足以确定任何给定元素的级别:
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
答案 2 :(得分:0)
我总是使用minidom并推荐它用于与XML文件的这种交互。为此,您可以使用元素的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)
这是指向minidom documentation的链接。