python - 如何使用 XPATH 获取 XML 标记的文本
问题描述
我这里有一个简单的 xml 标记,我只是想获取它上面的属性的文本,"en"
我想根据属性值来获取它,所以我通过 XPATH 来做
<tu>
<tuv xml:lang="de"><seg>Samp</seg></tuv>
<tuv xml:lang="en"><seg>Python is cool!</seg></tuv>
</tu>
如您所见,<tuv>
标记的属性是xml:lang
然后我在这里尝试了此代码
print(body_xml.find("tu").find('./tuv[@xml:lang="en"]').find("seg").text)
但是它给了我这个错误
raise SyntaxError("prefix %r not found in prefix map" % prefix) from None
SyntaxError: prefix 'xml' not found in prefix map
事情也是我试图删除xml:
,所以"lang"
留下了然后我试着这样说print(body_xml.find("tu").find('./tuv[@lang="en"]').find("seg").text)
,它工作了!现在我只是想知道我认为问题是因为这个角色:
,所以有没有一种方法可以正式正确地做到这一点?在这个伟大的社区中,我非常愿意接受任何建议 :) 感谢您帮助我的程序员伙伴!
解决方案
调用时需要使用命名空间find
import xml.etree.ElementTree as ET
xml = '''<tu>
<tuv xml:lang="de"><seg>Samp</seg></tuv>
<tuv xml:lang="en"><seg>Python is cool!</seg></tuv>
</tu>'''
nsmap = {"xml": "http://www.w3.org/XML/1998/namespace"}
root = ET.fromstring(xml)
seg_txt = root.find('.//tuv[@xml:lang="en"]', nsmap).find('seg', nsmap).text
print(seg_txt)
输出
Python is cool!
推荐阅读
- jetbrains-ide - 在 Rider 中为每个解决方案设置 .runsettings 路径
- c++ - 一个可由 1 个线程访问的数组,可以返回其他线程请求的数据
- nuxt.js - Nuxt 与 LocomotiveScroll 和 Gsap
- windows - 批处理脚本函数调用工作不正常
- vb6 - 与较新版本的 tlb 相关的 Microsoft Visual Basic 6 警告
- database - 文件“3050/var/lib/firebird/data/corp”的 CreateFile(打开)操作期间出现 I/O 错误。该系统找不到指定的路径
- java - 用java编写插入排序算法
- python - 使用 pandas 数据框应用来替换 numpy 数组中的行值
- python - 按国家分组计数操作,在 python 中返回数据框
- laravel - ErrorException 未定义的偏移量:Laravel API 中的 0