Python XML - 遍历元素,如果满足属性条件,将该元素及其所有 children 追加到列表中
Python XML - Iterate through elements, and if attribute condition is met, append that element with all its children to the list
我有脚本应该从 XML 文件中过滤掉一些元素。我这样做是因为我完全知道什么是元素的深度,有多少 children ...
但是你能给我一个例子,说明如何在不知道嵌套深度的情况下做到这一点吗?
代码如下所示:
def Filter_Modules(folder_name, corresponding_list):
for element in delta_root.iter('folder'):
if element.attrib.get('name') == str(folder_name):
corresponding_list.append(element)
for child in element:
corresponding_list.append(child)
for ch in child:
corresponding_list.append(ch)
for c in ch:
corresponding_list.append(c)
欢迎所有建议..
我知道你想输入 corresponding_list
全部
folder
元素的后代元素,其中 name
属性等于某个字符串。
那么一个好的解决方案是使用 递归 函数。 (在
一般来说,递归是处理数据结构的好方法,例如
树、图表、...)。
递归函数add_sub_tree
将andelement
附加到
corresponding_list
然后递归调用自身
children。 Children 也将附加到 corresponding_list
和
该函数将递归调用自身以追加所有 grand-children
等等。
def Filter_Modules(folder_name, corresponding_list):
def add_sub_tree(element):
corresponding_list.append(element)
for child in element:
add_sub_tree(child)
for element in delta_root.iter('folder'):
if element.attrib.get('name') == str(folder_name):
add_sub_tree(element)
我有脚本应该从 XML 文件中过滤掉一些元素。我这样做是因为我完全知道什么是元素的深度,有多少 children ... 但是你能给我一个例子,说明如何在不知道嵌套深度的情况下做到这一点吗?
代码如下所示:
def Filter_Modules(folder_name, corresponding_list):
for element in delta_root.iter('folder'):
if element.attrib.get('name') == str(folder_name):
corresponding_list.append(element)
for child in element:
corresponding_list.append(child)
for ch in child:
corresponding_list.append(ch)
for c in ch:
corresponding_list.append(c)
欢迎所有建议..
我知道你想输入 corresponding_list
全部
folder
元素的后代元素,其中 name
属性等于某个字符串。
那么一个好的解决方案是使用 递归 函数。 (在 一般来说,递归是处理数据结构的好方法,例如 树、图表、...)。
递归函数add_sub_tree
将andelement
附加到
corresponding_list
然后递归调用自身
children。 Children 也将附加到 corresponding_list
和
该函数将递归调用自身以追加所有 grand-children
等等。
def Filter_Modules(folder_name, corresponding_list):
def add_sub_tree(element):
corresponding_list.append(element)
for child in element:
add_sub_tree(child)
for element in delta_root.iter('folder'):
if element.attrib.get('name') == str(folder_name):
add_sub_tree(element)