XML的命名空间与python解析方法
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突,而XML 命名空间提供避免元素命名冲突的方法。 XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法: 除了显式定义,为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。也就是说所有没有前缀的标签都会带有默认的命名空间 解析带有命名空间的XML文件时,要注意标签的名字是命名空间与标签的结合,比如下面的XML文件: <?xml version='1.0' encoding='UTF-8'?> <nvd xmlns:vuln="http://bulabula" xmlns:cvss="http://abulaabula" xmlns="http://alulalula"> <entry id="CVE-2011-0001"> <vuln:cvss> <cvss:base_metrics> <cvss:score>5.0</cvss:score> </cvss:base_metrics> </vuln:cvss> </entry> </nvd> 其中默认的命名空间为xmls,另外声明了两个命名空间xmlns:vuln和xmlns:cvss。如果使用python的ElementTree解析,下面的代码是错误的 node.find('score').text运行的时候会报错,如下: AttributeError: 'NoneType' object has no attribute 'text'也就是说,node.find('score')没有找到任何结果。 正确的访问方式应该是这样的,也就是加上命名空间: cvss = “{http://abulabula}” node.find(cvss + 'score')对于例子中的entry这种没有显式前缀的标签,他们是带有隐式前缀xmlns的,所以访问时要加上xmlns的值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 依赖倒转原则与里氏代换原则
- c# – 检查方法与给定Delegate的兼容性?
- PostgreSQL服务器启动和关闭方法介绍
- GLSL 卡通shader
- 如何创建一个在传递块时初始化和关闭的Ruby类?
- ruby-on-rails – Rails ActiveRecord关系 – 避免写.blank
- cocos2dx-3.2 3DAction 一些3D特效
- ruby-on-rails – Ruby on Rails:如何更改RecordNotFound的
- 如何在flex中将字符串数据类型转换为date数据类型
- expdp 遇到 "Streams AQ: enqueue blocked on low memo