XML的命名空间与python解析方法

在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突,而XML 命名空间提供避免元素命名冲突的方法。

XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:

xmlns:namespace-prefix="namespaceURI"

当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。

除了显式定义,为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。也就是说所有没有前缀的标签都会带有默认的命名空间

请使用下面的语法:

xmlns="namespaceURI"

解析带有命名空间的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的值

时间: 2024-10-22 00:56:07

XML的命名空间与python解析方法的相关文章

iOS XML 系统自带的解析方法

XML 文档解析 使用的五个代理方法1.文档解析开始 parserDidStartDocument:2.文档解析结束 parserDidEndDocument:3.文档 解析元素 开始 didStartElement:4.文档 解析元素 结束 didEndElement:5.解析 文档元素 的内容 parser foundCharacters: #import <UIKit/UIKit.h> @interface ViewController : UIViewController<NSX

iOS开发中XML的DOM和SAX解析方法

一.介绍 dom是w3c指定的一套规范标准,核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的“树”,这树各节点和xml各标记对应,通过操纵此“树”来处理xml中的文件.xml文件很大时,建立的“树”也会大,所以会大量占用内存. sax解析器核心是事件处理机制.例如解析器发现一个标记的开始标记时,将所发现的数据会封装为一个标记开始事件,并把这个报告给事件处理器,事件处理器再调用方法(startElement)处理发现的数据.下面我们尝试一下SAX和DOM解析:

Python爬虫总结(二)常见数据类型及其解析方法

Python爬虫总结(二)常见数据类型 上一篇我们简单介绍了如何用Python发送 http/https 请求获取网上数据,从web上采集回来的数据的数据类型有很多种,主要有: 放在HTML里. 直接放在javascript里. 放在JSON里. 放在XML里. 注意:这里很多概念都是web前端开发里的,因为我们采集的大多数数据都来自web,因此了解一些前端知识还是挺有必要的. 下面我简单介绍下各种数据类型,并结合一些实例介绍它们的解析方法. 数据类型 放在HTML里 HTML即超文本标记语言,

Python解析XML文件

python对XML的解析 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同. python有三种方法解析XML,SAX,DOM,以及ElementTree: 1.SAX (simple API for XML ) pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件. 2.DOM(Document Object Model) 将XML数据在内存中解析成一个树,通过

使用Python解析JSON数据的基本方法

这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下: ----------------------------------------------------------------- Python的json模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. 下面演示如何将一个Python数据结构

python解析xml并按照其结构输出

平时写代码需要将一个xml文件按照其结构,将每个节点列出来,如: <root> <person age="18"> <name>hzj</name> <sex>man</sex> </person> <person age="19" des="hello"> <name>kiki</name> <sex>female

python cookbook第三版学习笔记七:python解析csv,json,xml文件

CSV文件读取: Csv文件格式如下:分别有2行三列. 访问代码如下: f=open(r'E:\py_prj\test.csv','rb') f_csv=csv.reader(f) for f in f_csv:     print f 在这里f是一个元组,为了访问某个字段,需要用索引来访问对应的值,如f[0]访问的是first,f[1]访问的是second,f[2]访问的是third. 用列索引的方式很难记住.一不留神就会搞错.可以考虑用对元组命名的方式 这里介绍namedtuple的方法.

python解析xml之lxml

虽然python解析xml的库很多,但是,由于lxml在底层是用C语言实现的,所以lxml在速度上有明显优势.除了速度上的优势,lxml在使用方面,易用性也非常好.这里将以下面的xml数据为例,介绍lxml的简单使用. [html]?view plain?copy ? 例子:dblp.xml(dblp数据的片段)?? <?xml?version='1.0'?encoding='utf-8'?>???? <dblp>?? ???????<article?mdate="

python 解析docx文档的方法,以及提取插入的文本对象和图片

首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. 3一个插入的文件对象.4 一个图片 这4个部分是我们在docx文档中最常见的几种格式.解析代码如下 import docx def docx_try():     doc=docx.Document(r'E:\py_prj\test.docx')     for p in doc.paragraph