首页 > 解决方案 > 如何使用 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),它工作了!现在我只是想知道我认为问题是因为这个角色: ,所以有没有一种方法可以正式正确地做到这一点?在这个伟大的社区中,我非常愿意接受任何建议 :) 感谢您帮助我的程序员伙伴!

标签: pythonpython-3.xxml

解决方案


调用时需要使用命名空间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!

推荐阅读