使用Python的ElementTree.iter()时保持父子关系

2024-04-25 01:49:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下标记:

<a>
  <b>
    <c>
    <d>
    <e>
  </b>
  <f>
    <g>
  </f>
</a>

使用ElementTree函数.iter()我得到如下结果:

^{pr2}$

我需要找到一种方法来保持父子关系,例如,我想知道“f”parent是“a”。我现在唯一能想到的方法就是每次找到父节点:len(list(elem))>;0时,我会将该节点添加到列表中,并跟踪节点的当前“级别”以建立该关系。我不觉得这个解决方案很优雅,我相信有一个更简单的解决方案,不幸的是,我还没有找到:/,我希望有人能给我一些启示:D

另外,在有人评论“在你问之前使用搜索”之前,我已经阅读了每一篇在某种程度上与我正在尝试做的事情相关的文章,比如:

碰巧他们是非常具体的用例,并没有完全帮助我,或者至少我没有找到一种方法来连接他们的解决方案和我的。在

提前谢谢


Tags: 方法函数标记gtlen节点解决方案list
1条回答
网友
1楼 · 发布于 2024-04-25 01:49:20

你可以使用字典,它更适合树状结构。目标是让字典的键成为父项,值是子项的列表。你可以这样做:

def get_children(parent):
    return [child for child in parent]

def get_parent_children_mapping(tree):
    return { parent: get_children(parent) for parent in tree.iter()}

示例用法如下:

^{pr2}$

您会发现根元素被省略了这是因为它显然没有父元素,但是它的子元素是从整个树上的get_parent_children_mapping返回的。在

在行动中看到它here。只要确保你的XML是有效的。在

相关问题 更多 >