Python 如何遍历所选父级的XML树子级?
我希望遍历我的XML树并从所选父级检索所有子级属性。这是我的解析设置:Python 如何遍历所选父级的XML树子级?,python,python-3.x,xml,xml-parsing,Python,Python 3.x,Xml,Xml Parsing,我希望遍历我的XML树并从所选父级检索所有子级属性。这是我的解析设置: import xml.etree.ElementTree as ET file_name = 'myXML.xml' tree = ET.parse(file_name) root = tree.getroot() 我使用的函数使用for循环,但每一代的每一层都需要一个for循环: 本质上,每个父级循环遍历每个子级并返回.tag,.text,&.attrib: 有没有一种方法可以在不知道层数的情况下循环并收集所有这些数据
import xml.etree.ElementTree as ET
file_name = 'myXML.xml'
tree = ET.parse(file_name)
root = tree.getroot()
我使用的函数使用for循环,但每一代的每一层都需要一个for循环:
本质上,每个父级循环遍历每个子级并返回.tag
,.text
,&.attrib
:
有没有一种方法可以在不知道层数的情况下循环并收集所有这些数据
def data_dump(k, mD, st):
for na in mD.iter(k):
for a in na:
print(st + '> a:: ', a.tag., a.text, a.attrib)
for b in a:
print('|-->', ' b:: ', b.tag, b.text, b.attrib)
for c in b:
print('|---->', ' c:: ', c.tag, c.text, c.attrib)
for d in c:
print('|------>', ' d:: ', d.tag, d.text, d.attrib)
以下是我的测试用例:
data_dump('Title', root, 'TITLE')
data_dump('Comment', root, 'COM')
data_dump('Steps', root, 'STEP')
data_dump('Transitions', root, 'TRANS')
data_dump('Branches', root, 'BRAN')
data_dump('Connections', root, 'CONN')
data_dump('Sequence', root, 'SEQ')
您的实现效率很低。随着XML中元素的增长,使用五个循环可能会大大增加运行时间。换句话说,O(n^5)是非常可怕的 对于您的问题,我建议您使用XPath,请阅读更多
将xml.etree.ElementTree作为ET导入
root=ET.parse(文件名)
结果=“”
对于root.findall(“.//子/孙”)中的元素:
如果elem.attrib.get('name')=='foo':
结果=元素文本
打破
您可以将相同的想法合并到函数中,并将其转化为
def数据转储(元素、值):
对于root.findall('.//parent/'+元素)中的元素:
如果elem.attrib.get('name')==值:
text,attrib,tag=elem.text,elem.attrib,elem.tag
打破
我也意识到,我正在解析的xml文件在每个标记前面都有一个名称空间,这也是findall
中需要的。