python - 如何从根目录中具有 xmlns 的 XML 文件获取数据

标签 python xml tree elementtree

数字.xml

<?xml version="1.0" encoding="utf-8"?>
<ResponseSent>
  <ResponseDate xmlns="http://example.com/schema">
   <emailid><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ac9d9e9fecd8c9dfd882cfc3c1" rel="noreferrer noopener nofollow">[email protected]</a></emailid>
    <number>22</number>
    <sent>2017-12-05</sent>
 </ResponseDate>

数字.py

import xml.etree.ElementTree as ET
tree = ET.parse('number.xml')
root = tree.getroot()
for country in root.findall('ResponseDate'):
    rank = country.find('emailid').text
    name = country.find('number').text
    print(name, rank)

返回空结果,但是当我将 xml 修改为 name= 而不是 xmlns= 时,它就可以工作了。但是,如何使该脚本与 xmlns 一起工作?

最佳答案

请注意,XML 中没有前缀的 xmlns 声明了默认命名空间,并且没有前缀的后代元素隐式继承了祖先的默认命名空间。现在要在命名空间中查找元素,您可以 定义引用 namespace URI 的前缀,并使用该前缀和目标元素的本地名称的组合:

....
ns = { 'd': 'http://example.com/schema' }
for country in root.findall('d:ResponseDate', ns):
    rank = country.find('d:emailid', ns).text
    name = country.find('d:number', ns).text
    print(name, rank)

关于python - 如何从根目录中具有 xmlns 的 XML 文件获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675421/

相关文章:

python - 根据条件从嵌套字典中删除子字典

python - Sqlite3 with Python - 从外部文件查询

recursion - Angular2递归组件输出

apache-flex - Flex 树不重新扩展

python - numpy 数组中的时间值到日期时间数组

用于监视目录的 Python 脚本在文件更新时会触发两次。为什么?

python - 根据其属性查找 xml 元素并更改其值

php - 使用 PHP 进行 USPS 费率计算器的 XML 请求和响应

xml - TSQL Xquery - 您可以选择重复节点的第一个实例吗?

algorithm - 合适的树数据结构