首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用python操作PowerPoint XML时是否存在子元素

使用python操作PowerPoint XML时是否存在子元素
EN

Stack Overflow用户
提问于 2021-07-25 10:41:24
回答 1查看 99关注 0票数 1

在使用python将Markdown转换为md2pptx的PowerPoint中,我实现了一些操纵XML树的函数。

在一些地方,我需要找到一个子元素(如果它存在的话)--如果不存在,就创建它。

我有一种相当讨厌的方法来寻找这个元素。我宁愿有个像样的方法。

所以,有人能给我发个“正确”的方式来寻找一个子元素的存在吗?

这个问题可能有一个更普遍的版本--如何在python的上下文中操作XML。我也需要一些参考资料。(是的,我可以阅读python-pptx代码,而且经常读-但是一个概要可以帮助我正确地理解它。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-25 12:15:18

在这项工作中使用XPath几乎总是正确的答案。

例如,如果您想让段落中的所有a:fld子元素实现与文本字段有关的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# --- get <a:p> XML element of paragraph ---
p = paragraph._p
# --- use XPath to get all the `<a:fld>` child elements ---
flds = p.xpath("./a:fld")
# --- do something with them ---
for fld in flds:
    do_fieldy_thing(fld)

.xpath()调用的结果是与作为参数提供的str XPath表达式匹配的零项或多项的列表。如果只能有0或一个结果,则通常这样处理它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if flds:
    do_fieldy_thing(flds[0])

当“启动”元素(在本例中为p)不是定义的oxml元素时,就会出现复杂的情况。oxmlpython-pptx为每个XML元素“在”基类的基础上添加的一层自定义元素类。这些自定义元素类提供了一些方便的服务,特别是允许您使用名称空间前缀指定元素(如本例中的"a:fld" )。

并非python-pptx中的所有元素都有自定义元素类,只有我们通过API以某种方式操作的元素类。从python-pptx对象(如上面的paragraph._p )获得的任何元素都将是oxml元素,但是.xpath()调用返回的元素很可能不是(否则您将使用python-pptx获取它们)。不是oxml元素的元素是普通的lxml.etree._Element实例。

.xpath()实例上的lxml.etree._Element实现需要使用所谓的“克拉克名称”,它看起来类似于:"{http://schemas.openxmlformats.org/drawingml/2006/main}fld"而不是"a:fld"

可以使用pptx.oxml.ns.qn()函数从名称空间前缀标记名创建克拉克名称:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from pptx.oxml.ns import qn
>>> qn("a:fld")
'{http://schemas.openxmlformats.org/drawingml/2006/main}fld'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68521561

复制
相关文章
DRAM:实现国产可替代的愿望挺难的
如今,“1bit只要1美元”的厂商早已退出DRAM市场, “三分天下”的局面难以打破,国产内存的希望如星星之火,尚不可燎原。
AI 电堂
2021/08/23
9520
DRAM:实现国产可替代的愿望挺难的
良好的BUG报告可以为您节省宝贵的时间。
一份糟糕的BUG记录不仅烦人,而且大大增加了时间长的开销。为你的下一份BUG报考增加更多更详细的信息,可以使你更快速的定位BUG从而节省时间成本。
疯狂的技术宅
2019/03/27
3700
良好的BUG报告可以为您节省宝贵的时间。
你以为Spring Boot统一异常处理能拦截所有的异常?
这类图相信大家没少见,Spring Boot 只要出错,体现在页面上的就是这个。如果你用Postman之类的测试出了异常则是:
码农小胖哥
2021/05/14
2.5K0
抢了个票,还以为发现了12306的系统BUG
12306在很久以前,对购票和乘车规则是有限制的,当同一乘车人的两张车票涉及的行程出现冲突时,会拒绝购票请求。
Coder的技术之路
2022/09/19
7380
抢了个票,还以为发现了12306的系统BUG
PostgreSQL 为什么Archive 缓慢或不归档,问题的原因在哪里
POSTGRESQL 中是可以对日志进行ARCHIVE 的, 但经常会有一个问题就是ARCHIVE 的速度好像经常没有产生WAL 日志的速度快,有的时候很长一段时间WALLOG 都没有被ARCHIVE, 原因是什么.
AustinDatabases
2020/11/26
1.9K0
jquery 列表可拖动排序 sortable
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery UI Sortable</title> <style type="text/css"> #myList{ width: 80px; background: #EEE; padding: 5px; list-style: none; } #myList a{ text-decoration: none; color: #0077B0; } #myList a:hover{ text-decoration: underline; } #myList .qlink{ font-size: 12px; color: #666; margin-left: 10px; } </style> </head> <body> <ul id="myList"> <li><a href="#">心情</a></li> <li> <a href="#">相册</a> <a href="#" class="qlink">上传</a> </li> <li> <a href="#">日志</a> <a href="#" class="qlink">发表</a> </li> <li><a href="#">投票</a></li> <li><a href="#">分享</a></li> <li><a href="#">群组</a></li> </ul>
用户5760343
2019/10/10
2.4K0
jquery 列表可拖动排序 sortable
POSTGRESQL 以为是BUG,其实是PG的特性 与感谢
昨天的文字中,提到了一个自己认为是POSTGRESQL 问题的文字,就是在建立表的时候,在输错类型后,还是会通过,具体请参见昨天的文字.
AustinDatabases
2021/05/11
6960
POSTGRESQL  以为是BUG,其实是PG的特性 与感谢
归档
归档 基本概念 - 对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象。你也可以称他为对象序列化,对象持久化。 数据持久性的方式 NSKeyedArchiver --- 对象归档 NSUserDefaults 属性列表化(NSArray、NSDictionary保存文件) SQlite数据库、Core Data数据库 归档的形式 对Foundation库中对象进行归档 自定义对象进行归档(需要实现归档协议,NSCoding) 归档后的文件是加密的,属性列表是明文的。属性列表也不
用户1941540
2018/05/11
1.2K0
归档
tar是“tape archive”(磁带存档)的简称,它出现在还没有软盘驱动器、硬盘和 光盘驱动器的计算机早期阶段,随着时间的推移, tar命令逐渐变为一个将很多文件进行存档的工具,目前许多用于Linux操作系统的程序就是打包为tar档案文件的形式。 在Linux里面,tar一般和其他没有文件管理的压缩算法文件结合使用,用tar打包整个文件目录结构成一个文件,再用gz,bzip等压缩算法压缩成一次。也是Linux常见的压缩归档的处理方法
酷走天涯
2019/05/26
1.1K0
关于Linux的grep -f命令,我以为我发现了bug
今天,我像往常一样提取基因组的样本,我有一堆样本的ID,需要从所有的基因型的文件中提取出来。
邓飞
2021/09/03
1.2K0
智能图形和列表在哪里呢?慢慢学会SmartArt智能图形和列表。
1、点击[插入] 2、点击[SmartArt] 3、点击[循环] 4、点击[图片] 5、点击[确定]
裴来凡
2022/05/28
9960
智能图形和列表在哪里呢?慢慢学会SmartArt智能图形和列表。
可迭代对象 python_列表是可迭代对象吗
引出问题: ​如下面所示,存在一个类,并且产生了一个对象,现在想用for循环实现对象的迭代,结果报错了
全栈程序员站长
2022/09/21
9160
Bug 看你往哪里逃?我会让你无所遁形
编程中的 Bug ,Error 等各种报错是不可避免的,如果有一个好的 logcat 工具绝对可以帮助大家快速的定位到错误,并高效的找到解决办法。
非著名程序员
2018/07/30
3330
Bug 看你往哪里逃?我会让你无所遁形
通过RMAN设置standby接收日志后主库归档日志才可删除
因为Oracle archivelog会不断生产,一般会设置定期清理archivelog的排程,类似下面。
PHP开发工程师
2021/05/25
1.5K0
【C++11】统一的 {} 列表初始化
​ 在 C++98 中,标准允许使用花括号 {} 对数组或者结构体元素进行统一的列表初始值设定。比如:
利刃大大
2025/03/01
980
【C++11】统一的 {} 列表初始化
主动推理 与 信念-愿望-意图 (BDI)
Active inference models do not contradict folk psychology
CreateAMind
2022/11/22
6950
主动推理 与 信念-愿望-意图 (BDI)
我以为发现了Android 14系统中的一个bug,然而...
事情的起因是这样的,某天工作群里,我看到我们部门的同事guting发了这样一条消息。
用户1158055
2024/01/10
8980
我以为发现了Android 14系统中的一个bug,然而...
tar - 归档
参数 说明 z 创建 gzip 格式的压缩包 j 创建 bz2 格式的压缩包 J 创建 xz 格式的压缩包 x 解压一个压缩包 c 创建一个压缩包 t 查看压缩包的内容 r 把文件追加到压缩包末尾 u 用新的文件替换压缩包中的旧文件 # 创建一个压缩包,排除一些文件 tar zcvf data.tar.gz -T /root/aa -X /root/bb -T:指定需要压缩的目录或文件,需要绝对路径 -X:指定需要排除的文件或目录,需要绝对路径
陳斯托洛夫斯記
2022/10/27
1.4K0
PostgreSQL 13.0-13.15 功能更新和bug fixed列表
在总结了PostgreSQL 12 14 15 16版本的release note和bug fixed的细节后,此次总结最后的一部分 PG13的release note里面的信息。PG13 有15个版本,我们从PG13.1 开始
AustinDatabases
2024/11/25
1490
PostgreSQL 13.0-13.15 功能更新和bug fixed列表
从MYSQL 数据库归档 到 归档设计
到数据归档,很多人的第一个概念就是,不就是无用的数据,换个地方放吗,直接拷贝,删除不就得了,有那么麻烦。
AustinDatabases
2020/04/24
5.1K0

相似问题

我在哪里为木星小程序归档bug?

10

桌面菜单在哪里归档?

10

在哪里可以为iPad买到Ubuntu?

20

统一设置存储在哪里?

10

哪里可以为Ubuntu 20.04找到GNU 4.3

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文