博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python使用lxml解析命名空间xml
阅读量:4224 次
发布时间:2019-05-26

本文共 2195 字,大约阅读时间需要 7 分钟。

python使用lxml解析命名空间xml

python解析xml使用较简单的是用lxml包来解析,最方便获取节点的是通过xpath语法,但是带命名空间的xml文档就无法正常解析到,需要在解析时加入namespace的命名空间头信息,折腾半天,特记录如下:

示例xml

sp
20181127000077
03880097
031800GS62170804
测试项目
8E14D561A70FA036E0430A97D0E6A036
0318
名称1
0319
名称2

通过循环把所有的命名空间找出

root_node = etree.fromstring(text=xml)        for i in root_node:            print(i.nsmap)            for x in i:                print(x.nsmap)

执行结果

{'test': 'http://schemas.xmltest.org/test/envelope/', 'test-ENV': 'http://schemas.xmltest.org/test/envelope/'}{'test': 'http://schemas.xmltest.org/test/envelope/', 'test-ENV': 'http://schemas.xmltest.org/test/envelope/', 'xxx': 'http://test.cn'}{'test': 'http://schemas.xmltest.org/test/envelope/'}{'test': 'http://schemas.xmltest.org/test/envelope/', None: 'http://test.cn'}

整合到一起

ns = {'xxx': 'http://test.cn', 'test': 'http://schemas.xmltest.org/test/envelope/', 'test-ENV': 'http://schemas.xmltest.org/test/envelope/', None: 'http://test.cn'}

获取节点内容

print(root_node.find('.//id',namespaces=ns)) # 获取单节点print(root_node.findall('.//id',namespaces=ns)) # 获取所有同名节点

也可以直接通过拼接命名空间来获取

print(root_node.findall('.//{http://test.cn}id'))

子节点也同样可以查找到

print(root_node.findall('.//equipmentName', namespaces=ns))print(root_node.findall('.//{http://test.cn}equipmentName'))

执行结果

[
,
]

可以通过循环获取具体内容

for node in root_node.findall('.//equipmentName', namespaces=ns):    print(node.tag.replace('{' + ns['xxx'] + '}', ''), node.text)

结果:

equipmentName 名称1equipmentName 名称2

循环遍历equipmentObjectList所有子节点

for node in root_node.findall('*//syncAssetListOfCompletedProjRequest//equipmentObjectList', namespaces=ns):    for a in node:        for b in a:            print(b.tag.replace('{' + ns['xxx'] + '}', ''), b.text)

结果:

equipmentCode 0318equipmentName 名称1materialObjectList NoneequipmentCode 0319equipmentName 名称2materialObjectList None

转载地址:http://cnuqi.baihongyu.com/

你可能感兴趣的文章
eclipse 给jar库添加源码
查看>>
C++ 枚举声明 enum 和 enum class
查看>>
Python optionParser模块的使用方法
查看>>
android 消灭星星出错
查看>>
PyCharm 教程(三)Hello world!
查看>>
PyCharm: 显示源码行号
查看>>
cocos2dx使用第三方字库.ttf,需要注意的事项
查看>>
cocos2.X版本lua端使用定时器的方法
查看>>
lua math.fmod使用注意小数问题
查看>>
lua 时间转化
查看>>
lua学习笔记之五(Lua中的数学库)
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第三篇:我的舍与得的2014[张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第五篇:不要给自己找任何借口【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第八篇:坚持的力量 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第九篇:春节那些事-过年回家不需要理由【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十一篇:马云乌镇40分钟演讲实录【张振华.Jack】
查看>>
Java并发编程从入门到精通 张振华.Jack --我的书
查看>>