ElementTree - 查找仅在树中列为父项的子项的父项

时间:2016-04-28 13:46:03

标签: python elementtree

我遇到了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。但显然这也不对。

那么,我该怎么办?有人可以帮忙吗?

非常感谢您提前!

0 个答案:

没有答案