1

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

4

3 回答 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

我假设您的意思是“python xml 解析器” 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 回答
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 文档的链接。

于 2013-03-01T06:46:21.720 回答