Python 解析含有命名空间(xmlns)的xml文件(基于ElementTree)

Outline

为什么会有命名空间?

XML的元素名字是不固定的,当两个不同的文档,使用同样的名称描述两个不同类型的元素的时候,或者一个同样的标记表示两个不同含义的内容的时候,就会发生命名冲突。

这时,命名空间是可以解决这个问题的;

命名空间(Namespace),对于每一套特定应用的DTD,给它一个独一无二的标志来代表,如果在XML中使用DTD中定义的元素,需将 DTD的标志和元素名,属性连在一起使用,相当于指明了元素来自什么地方,这样就不会同其他同名元素混淆了。

命名空间允许我们在一个文档中结合不同的元素和属性定义,并指明这些元素和属性的定义来自那里。

命名空间语法结构:

xmlns:[prefix]=”[url of name]”

其中“xmlns:”是必须的属性。“prefix”是命名空间的别名,它的值不能为xml。

Evening Batch

遇到的问题

在用ElementTree解析xml时,一直很顺利,都能解析成功;但突然出现解析不出xml情况,文本编辑器打开xml文档发现里面是有内容的;

仔细观察了下发现根标签中有一个 xmlns 属性,查了下原来是 命名空间, xml中有命名空间的情况下,获取子标签内容的话,就需要通过命名空间去唯一标识这个标签。

现在知道xml文件中的xmlns了,剩下就是结合xmlns解析数据了;

debug观察标签情况

简单debug下,看下包含xmlns的标签是什么样子的;

发现包含命名空间的xml,解析时(或者去定位标签时)标签的构成是:命名空间+标签名

解析数据

通过上面操作已经知道当前xml文本的xmlns是什么了,所以就直接给标签拼接上xmlns,这样获取的内容就都是该命名空间下的内容了。

importxml.etree.ElementTree as ET

path= 'C:\data\美股数据\GenInfo03_NA_i_20200609_1of1.xml\GenInfo_00B6F.xml'tree=ET.parse(path)#for i in tree.iter():#print(i.tag)

root =tree.getroot()

namespace= '{urn:reuterscompanycontent:generalinformation03}'iter_root= root.iter(namespace + 'GeneralInformation') #直接给标签拼接上xmlns

ret =[]defget_xml_content(iter_root):"""递归获取xml标签内容"""

for node initer_root:

dic=node.attrib

text=node.textif len(dic) == 0 and text == '\n':pass

else:

dic['text'] =text

t= node.tag.split('}')[-1]

ret.append({t: dic})

get_xml_content(node)

get_xml_content(iter_root)

参考信息

How does XPath deal with XML namespaces?

如何使用Python ElementTree获取元素树的所有子元素?

python xmlns 解析_Python 解析含有命名空间(xmlns)的xml文件(基于ElementTree)相关推荐

  1. python epub解析_python 解析电子书的信息

    epub 书是可供人们下载的开放性资源格式的电子图书.epub 文件通常与类似亚马逊Kindle 这样的电子阅读器不兼容. 一个epub 文件包含两个文件:一个包含数据的压缩文件(.zip文件)以及一 ...

  2. python中dom模块_Python中使用dom模块生成XML文件示例

    在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...

  3. Java dom4j解析RESTFull风格发布的WebService的xml文件

    公司项目要求解析出RESTFull风格发布的WebService接口的所有请求方法,参数,参数类型,已经方法是返回类型,想来想去都不知道该怎么办,思来想去然后又研究RESTFull风格WebServi ...

  4. Android学习笔记---26_网络通信之资讯客户端,使用pull解析器,解析,从网络中获得的自定义xml文件

    7.25_网络通信之资讯客户端 ---------------------------- 1.网络中一般是使用自己定义的格式比如:   案例:酷6网的视频客户端有一个功能:"在手机上显示最新 ...

  5. python统计文件大小_python工具--01.统计当前目录下的文件的大小

    环境 os: centos7 python : 3.7 实现功能 统计当目录下的文件夹有文件的大小,单位KB/MB/B: 代码实现 #!/usr/bin/env python # _*_ coding ...

  6. python命令解析_python解析命令行

    可以解析这样的命令 ./cron_ctrl jobname1 --stop ;./cron_ctrl jobname1 --start;./cron_ctrl jobname1 --list #!/u ...

  7. python pyquery库_python解析HTML之:PyQuery库的介绍与使用

    前言 Python关于爬虫的库挺多的,也各有所长.了解前端的也都知道, jQuery 能够通过选择器精确定位 DOM 树中的目标并进行操作,所以我想如果能用 jQuery 去爬网页那就 cool 了. ...

  8. python 报文解析_python解析DNS数据包实例代码

    例子,python解析DNS数据包. 代码示例: ###file QueryDNS.py## -*- coding: utf-8 -*- #Get DNS answer #详情见RFC 1035 im ...

  9. python 邮件解析_Python解析邮件

    邮件的解析是个大课题,远超一般人的预期.它远比发送邮件和接收邮件要复杂的多的多. 这就是为什么网上中文外文搜邮件的问题,绝大多数都是讲发送的而讲接收的很少. 发送邮件好说,接收和下载邮件也好说.关键是 ...

最新文章

  1. java 关闭串口_java – 打开和关闭串行端口
  2. VS2013在Release情况下使用vector有时候会崩溃的一个可能原因
  3. 【算法】BloomFilter 与 CuckooFilter
  4. hihocoder第196周
  5. Linux下的 API Hook
  6. SOA项目失败十大原因及完善建议(转)
  7. 高观点下的高等数学(数学分析、线性代数)
  8. ATAC-seq以及相关技术(DNase-seq,MNase-seq,NOMe-seq)的发展
  9. 传智播客Java实现键盘数据的录入和if
  10. 雅型钢五金大全(五金计算器)绿色便携版V20220512 | 实用五金计算软件下载
  11. SEO兵书:搜索引擎优化手册
  12. 阿里网盘官网网页,怎么隐藏的这么深
  13. redis实现的分布式锁为啥要设置过期时间?
  14. android qq音乐歌词怎么实现,歌词翻译利器 QQ音乐Android3.9.5版本全新上线
  15. gom及gee小白架设黑屏的原因以及个别装备地图不显示怎么办?
  16. 讯飞AIUI平台语义理解配置全攻略——以Android版AIUI SDK为例
  17. 解密android日志xlog,mars的xlog日志文件解析以及日志查看工具介绍
  18. 使用DNS来屏蔽广告
  19. 取消福昕阅读器手型工具向下的箭头
  20. 【译】用Java创建你的第一个区块链-part2:可交易

热门文章

  1. 【python做接口测试的学习记录day10——pytest自动化测试框架之接口加密】
  2. java io框架图_Java IO流体系继承结构图解析
  3. 红队简单钓鱼实战---office宏
  4. 最好的Python入门教材是哪本?
  5. Java序列化的3种方式
  6. linux ultraedit安装教程,Linux系统安装最新版本Vim编辑器的简单方法整理
  7. Tomcat闪退,java环境变量导致
  8. android全磁盘加密
  9. Visual Studio2017自动生成的#include“stdafx.h”详解及解决方案
  10. 朴素贝叶斯分类器python_python实现高斯朴素贝叶斯分类器