为了账号安全,请及时绑定邮箱和手机立即绑定

访问ElementTree节点的父节点

访问ElementTree节点的父节点

慕神8447489 2019-10-11 11:10:36
我正在使用内置的Python ElementTree模块。访问子级很简单,但是父级或同级节点呢?-是否可以有效地完成而不遍历整个树?
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

没有直接支持parent属性的形式,但是您可以使用此处描述的模式来实现所需的效果。建议使用以下一类代码(从链接到文章)为整个树创建子对象到父对象的映射:


parent_map = dict((c, p) for p in tree.getiterator() for c in p)


查看完整回答
反对 回复 2019-10-11
?
PIPIONE

TA贡献1829条经验 获得超9个赞

Vinay的答案应该仍然有效,但是对于Python 2.7+和3.2+,建议以下操作:


parent_map = {c:p for p in tree.iter() for c in p}

getiterator()不推荐使用iter(),而推荐使用新的dict列表理解构造函数。


其次,在构造XML文档时,一个孩子可能会有多个父母,尽管一旦您序列化该文档,该父母就会被删除。如果那很重要,您可以尝试以下方法:


parent_map = {}

for p in tree.iter():

    for c in p:

        if c in parent_map:

            parent_map[c].append(p)

            # Or raise, if you don't want to allow this.

        else:

            parent_map[c] = [p]

            # Or parent_map[c] = p if you don't want to allow this


查看完整回答
反对 回复 2019-10-11
?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以...在ElementTree中使用xpath 表示法。


<parent>

     <child id="123">data1</child>

</parent>


xml.findall('.//child[@id="123"]...')

>> [<Element 'parent'>]


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 1404 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信