(Python)如何获取xml中的节点级别?

时间:2013-03-01 06:14:50

标签: python xml xml-parsing

使用python xml解析器有没有一种有效的方法来获取xml中每个节点的级别?节点的级别也可以通过在解析xml自上而下的情况下计算结束标记来确定,但是,我也需要帮助:)。谢谢!

3 个答案:

答案 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的链接。