我遇到了python的etree问题。
我有一个遵循以下逻辑的xml文档:该文档是一个章节,其中有章节。部分也可以有部分。否则部分有标题和段落。所以,基本上是这样的:
<chapter>
<section>#problem
<title>Title A</title>
<paragraph />
<section>
<title>Title B</title>
<paragraph />
</section>
<section>
<title>Title C</title>
<paragraph />
</section>
</section>
</chapter>
现在我使用Pythons ElementTree使用基本代码获取不同元素到其父元素的位置:
def get_node_parent_info(root, node):
parent_map = {c:p for p in root.iter() for c in p}
parent = parent_map[node]
return parent, list(parent).index(node)
def delete_from_tree(file, title):
tree = ET.ElementTree(file=subfile)
root = tree.getroot()
for element in root.iter():
if "title" in element.tag and element.text in title_list:
parent, index = get_node_parent_info(root, node)
grandparent, grand_index = get_node_parent_info(root, parent)
grandparent.remove(parent)
file_path = "C:/xml_archive/document.xml"
delete_from_tree(file_path, "Title C") #works fine
delete_from_tree(file_path, "Title A") #KeyError
现在我遇到了以下问题: 每当我想得到与该章的关系中的标记部分时,我将得到一个KeyError,因为该部分不在该列表中作为子节点,仅作为父节点。 (我已经将代码打印到字典中,那部分只显示为小孩,而章节根本没有出现。)
我已经尝试过猜测,通过编写一个异常,在节点不在列表中作为键/子节点的情况下,它应该将“root”命名为parent。但显然这也不对。
那么,我该怎么办?有人可以帮忙吗?
非常感谢您提前!