python-访问ElementTree节点父节点

我正在使用内置的Python ElementTree模块。 访问子级很简单,但是父级或同级节点呢? -是否可以有效地完成而不遍历整个树?

hoju asked 2019-12-30T00:32:30Z

9个解决方案

44 votes

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

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

Vinay Sajip answered 2019-12-30T00:32:49Z

20 votes

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

supergra answered 2019-12-30T00:33:18Z

10 votes

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

data1

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

>> []

josven answered 2019-12-30T00:33:38Z

5 votes

如使用查找方法(xml.etree.ElementTree)后获取父元素中所述,您将不得不间接搜索父对象。具有xml:

data

data

假设您已将etree元素创建为secondparent=xml.find('.//c/../..')变量,则可以使用:

In[1] parent = xml.find('.//c/..')

In[2] child = parent.find('./c')

导致:

Out[1]:

Out[2]:

高级父母将被发现为:secondparent=xml.find('.//c/../..')是

Vaasha answered 2019-12-30T00:34:11Z

3 votes

XPath'..'选择器不能用于在3.5.3或3.6.1(至少在OSX上)上检索父节点,例如在交互模式下:

import xml.etree.ElementTree as ET

root = ET.fromstring('')

child = root.find('child')

parent = child.find('..') # retrieve the parent

parent is None # unexpected answer True

最后一个答案打破了所有希望。

jlaurens answered 2019-12-30T00:34:36Z

2 votes

如果只想要一个subElement的父级,并且也知道subElement的xpath,则是另一种方式。

parentElement = subElement.find(xpath+"/..")

MK at Soho answered 2019-12-30T00:34:55Z

1 votes

如果您使用的是lxml,则可以使用以下命令获取父元素:

parent_node = next(child_node.iterancestors())

如果元素没有祖先,则将引发StopIteration异常-因此,如果您可能遇到这种情况,请准备好捕获该异常。

Shadow answered 2019-12-30T00:35:20Z

1 votes

将我的答案从[https://stackoverflow.com/a/54943960/492336:]粘贴到此处

我有一个类似的问题,我有点创意。 事实证明,没有什么阻止我们自己添加育儿信息。 一旦不再需要它,我们以后可以剥离它。

def addParentInfo(et):

for child in et:

child.attrib['__my_parent__'] = et

addParentInfo(child)

def stripParentInfo(et):

for child in et:

child.attrib.pop('__my_parent__', 'None')

stripParentInfo(child)

def getParent(et):

if '__my_parent__' in et.attrib:

return et.attrib['__my_parent__']

else:

return None

# Example usage

tree = ...

addParentInfo(tree.getroot())

el = tree.findall(...)[0]

parent = getParent(el)

while parent:

doSomethingWith(parent)

parent = getParent(parent)

stripParentInfo(tree.getroot())

sashoalm answered 2019-12-30T00:35:45Z

-1 votes

看一下19.7.2.2。 部分:支持的XPath语法...

使用以下路径查找节点的父节点:

parent_node = node.find('..')

Alf answered 2019-12-30T00:36:09Z

python elementtree 父节点_python-访问ElementTree节点父节点相关推荐

  1. python spider是什么_python分布式爬虫中spider_Worker节点指的是什么

    python分布式爬虫中spider_Worker节点指的是什么 发布时间:2020-11-30 14:07:27

  2. python调用数据库判断_python 访问数据库 笔记

    1 使用dbm持久字典 存储名称.值对,保存在磁盘上,键和值都必须是字符串类型 不同dbm模块创建的文件是不兼容的.如果使用某个dbm模块创建一个dbm持久字典,那么必须使用相同的模块来读取数据. d ...

  3. python包之间引用_python 子包引用父包和其他子包

    python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...

  4. python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解

    今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...

  5. python定位相邻节点_Python selenium 父子、兄弟、相邻节点定位方式详解

    今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...

  6. python 节点_python在以太坊开发中节点和网络如何选择?

    以太坊节点 为什么我需要连接到一个节点? 以太坊协议定义了一种方法,用于人们通过网络与智能合约相互作用.为了获得关于合约.账户余额和新交易状态等最新的信息,协议需要与网络上的节点进行连接.这些节点不断 ...

  7. python链表删除尾部节点_python单链表中如何查找和删除节点?

    在之前的文章[python单链表中如何插入和输出节点?]中给大家介绍了单链表是什么,以及如何进行添加节点.输出所以节点.下面本篇文章给大家介绍如何查找和删除节点,希望对大家有所帮助. 如何从单链表中查 ...

  8. python中的文件父路径怎么表达_python中的文件父路径怎么表达_如何在Python中访问父目录...

    所以我有一个朋友给我的Python脚本,但是我没有Python的经验.代码如下:from os import path, chdir, listdir, mkdir, getcwd from sys ...

  9. python获取sap数据_Python驱动SAP GUI完成自动化(选择布局+动态获取节点值)

    讨论过如何利用工具Scripting Tracker录制python操纵SAP GUI的py脚本.软件的录制和生成的代码界面如下: 场景一:实际业务中,除了一些常规步骤,我们可能会驱动SAP GUI中 ...

  10. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

最新文章

  1. Go 知识点(07)— 对已经关闭通道进行读写
  2. 对FCKEditor = 2.6.4 通杀 exploit 的分析
  3. python3 list 列表 方法说明
  4. python高阶函数
  5. _用WSL,MobaXterm,Cmder配置linux开发环境
  6. netcore权限控制_netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源...
  7. 20180802总结
  8. 一款基于jquery和css3实现的摩天轮式分享按钮
  9. 保罗兰德作品赏析_保罗兰德——理想化的设计师人生
  10. Redhat linux 5 Server相关介绍
  11. python-pygame安装教程
  12. spring-security 实现单点登录
  13. Dango搭建个人博客:前言
  14. 火遍全网的 ChatGPT,给你的求职新方向
  15. 在2022年需要使用的25个最佳GOOGLE CHROME扩展
  16. 极简风格的演讲型幻灯片设计
  17. MathJax:微积分常用符号
  18. 【风控系列】3. 高效的风控业务流程
  19. 怎么压缩视频到最小,什么操作简单
  20. 下载tensorflow时遇到的问题

热门文章

  1. CSDN Blog V3.0.0.2升级公告
  2. 物流行业如何选择手持终端
  3. Office365 用户同步排错思路
  4. 牛客 [编程题] 回文解码
  5. css3实现宽度渐变
  6. 08--swift之类与结构体
  7. Bootstrap系列 -- 38. 基础导航条
  8. SQL Server 监控系列(文章索引)
  9. redis 大数据插入
  10. STL容器是否是线程安全的