有没有一种有效的方法来获取xml中每个节点的级别,使用python 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
我假设您的意思是“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 回答