python解析xml---xml.dom

xml.dom: 文档对象模型

模块内容

xml.dom包含以下功能:

xml.dom.registerDOMImplementation(name, factory)
使用名称注册工厂函数。工厂函数应返回实现名称接口的对象。

xml.dom.getDOMImplementation([name[, features]])
返回一个合适的DOM实现。

xml.dom 还提供了一些便利常数:

xml.dom.EMPTY_NAMESPACE
用于指示没有命名空间与DOM中的节点关联的值。这通常作为namespaceURI节点发现,或者用作特定于命名空间的方法的namespaceURI参数。

xml.dom.XML_NAMESPACE
与保留前缀关联的名称空间URI xml,由XML中的命名空间定义 。

xml.dom.XMLNS_NAMESPACE
名称空间声明的名称空间URI,由文档对象模型(DOM)级别2核心规范定义。

xml.dom.XHTML_NAMESPACE
XHTML 1.0定义的XHTML命名空间的URI :可扩展超文本标记语言。

DOM中的对象

接口 部分 目的
DOMImplementation DOMImplementation对象 底层实现的接口。
Node 节点对象 文档中大多数对象的基本接口。
NodeList NodeList对象 一系列节点的接口。
DocumentType DocumentType对象 有关处理文档所需声明的信息。
Document 文件对象 表示整个文档的对象。
Element 元素对象 文档层次结构中的元素节点。
Attr Attr对象 元素节点上的属性值节点。
Comment 注释对象 源文档中的注释表示。
Text 文本和CDATASection对象 包含文档中文本内容的节点。
ProcessingInstruction ProcessingInstruction对象 处理指令表示。

1、DOMImplementation对象

DOMImplementation界面为应用程序提供了一种确定其所使用的DOM中特定功能的可用性的方法。

DOMImplementation.hasFeature(feature, version)
如果实现了由字符串对功能和 版本标识的功能,则返回true 。

DOMImplementation.createDocument(namespaceUri,qualifiedName,doctype )
返回一个新Document对象(DOM的根),其子 Element对象具有给定的namespaceUri和qualifiedName。

DOMImplementation.createDocumentType(qualifiedName,publicId,systemId )
返回一个DocumentType封装给定qualifiedName,publicId和systemId字符串的新对象 ,表示XML文档类型声明中包含的信息。

2、节点对象

XML文档的所有组件都是子类Node。

Node.nodeType
表示节点类型的整数。【只读属性】
对于类型的符号常量是在Node对象:ELEMENT_NODE,ATTRIBUTE_NODE, TEXT_NODE,CDATA_SECTION_NODE,ENTITY_NODE, PROCESSING_INSTRUCTION_NODE,COMMENT_NODE, DOCUMENT_NODE,DOCUMENT_TYPE_NODE,NOTATION_NODE。

Node.parentNode
当前节点的父节点,或None文档节点的父节点。【只读属性】

Node.attributes
一个NamedNodeMap属性对象。【只读属性】

Node.previousSibling
紧跟在此节点之前的节点,具有相同的父节点。【只读属性】
如果此节点是父节点的第一个子节点,则此属性将为 None。

Node.nextSibling
紧跟在此节点之后的节点,具有相同的父节点。【只读属性】
如果这是父项的最后一个子项,则此属性为None。

Node.childNodes
此节点中包含的节点列表。【只读属性】

Node.firstChild
节点的第一个子节点。 【只读属性】

Node.lastChild
节点的最后一个子节点。 【只读属性】

Node.localName
tagName如果有一个冒号以下的部分,否则整个tagName。该值是一个字符串。

Node.prefix
tagName如果有一个冒号前面的部分,否则为空字符串。值是一个字符串,或None。

Node.namespaceURI
与元素名称关联的名称空间。这将是一个字符串或 None。【只读属性】

Node.nodeName
这对每种节点类型都有不同的含义; 【只读属性】
例如:tagName元素的name 属性或属性的属性。
对于所有节点类型,此属性的值将是字符串或None。

Node.nodeValue
这对每种节点类型都有不同的含义; 情况类似于nodeName。值是一个字符串或None。

Node.hasAttributes()
如果节点具有任何属性,则返回true。

Node.hasChildNodes()
如果节点具有任何子节点,则返回true。

Node.isSameNode(other)
如果other引用与此节点相同的节点,则返回true 。
这对于使用任何类型的代理体系结构的DOM实现特别有用(因为多个对象可以引用同一节点)。

Node.appendChild(newChild )
将新子节点添加到子节点列表末尾的此节点,返回newChild。如果节点已在树中,则首先将其删除。

Node.insertBefore(newChild,refChild )
在现有子项之前插入新的子节点。
refChild必须是此节点的子节点的情况; 如果没有,ValueError就会被提出来。 返回newChild。如果refChild是None,它插入newChild对象在儿童列表的末尾。

Node.removeChild(oldChild )
删除子节点。
oldChild必须是此节点的子节点; 如果没有, ValueError就会被提出来。 成功返回oldChild。如果 不再使用oldChild,unlink()则应调用其方法。

Node.replaceChild(newChild,oldChild )
用新节点替换现有节点。必须是 oldChild 是此节点的子节点的情况; 如果没有,ValueError就会被提出来。

Node.normalize()
加入相邻的文本节点,以便将所有文本段存储为单个 Text实例。

Node.cloneNode(deep)
克隆此节点。
设置深度也意味着克隆所有子节点。这将返回克隆。

3、NodeList对象

一个NodeList表示节点序列。

NodeList.item(i )
如果有的话,请从序列中返回第i个项目,或者None。索引i不允许小于零或大于或等于序列的长度。

NodeList.length
序列中的节点数。
所有 NodeList实现必须包括对__len__()和的 支持 getitem();
如果DOM实现支持修改文档,则 NodeList实现还必须支持 setitem()和__delitem__()方法。

4、DocumentType对象

可以从DocumentType对象获得有关文档声明的符号和实体的信息。
在DocumentType为一个文件可以从Document对象的doctype 属性; 如果没有DOCTYPE文档声明,则将文档的doctype属性设置为None而不是此接口的实例。

DocumentType是一个特化Node,并添加以下属性:

DocumentType.publicId
文档类型定义的外部子集的公共标识符。这将是一个字符串或None。

DocumentType.systemId
文档类型定义的外部子集的系统标识符。这将是一个URI作为字符串,或None。

DocumentType.internalSubset
一个字符串,提供文档中的完整内部子集。这不包括括起子集的括号。如果文档没有内部子集,则应该是None。

DocumentType.name
DOCTYPE声明中给出的根元素的名称(如果存在)。

5、文件对象

Document表示整个XML文档,包括其组成元素,属性,处理指令,注释等。

Document.documentElement
文档中唯一的根元素。

Document.createElement(tagName )
创建并返回一个新元素节点。
创建时,元素不会插入到文档中。需要使用其他方法(如insertBefore()或appendChild())显式插入它。

Document.createElementNS(namespaceURI,tagName )
使用命名空间创建并返回一个新元素。该标签名可以有一个前缀。创建时,元素不会插入到文档中。您需要使用其他方法(如insertBefore()或appendChild())显式插入它 。

Document.createTextNode(data)
创建并返回包含作为参数传递的数据的文本节点。与其他创建方法一样,此方法不会将节点插入树中。

Document.createComment(data)
创建并返回包含作为参数传递的数据的注释节点。与其他创建方法一样,此方法不会将节点插入树中。

Document.createProcessingInstruction(target, data)
创建并返回一个处理指令节点,其中包含作为参数传递的目标和 数据。与其他创建方法一样,此方法不会将节点插入树中。

Document.createAttribute(name)
创建并返回属性节点。
此方法不会将属性节点与任何特定元素相关联。
必须 setAttributeNode()在相应的Element对象上使用新创建的属性实例。

Document.createAttributeNS(namespaceURI,qualifiedName )
使用命名空间创建并返回属性节点。该标签名可以有一个前缀。
此方法不会将属性节点与任何特定元素相关联。
必须setAttributeNode()在相应的 Element对象上使用新创建的属性实例。

Document.getElementsByTagName(tagName )
搜索具有特定元素类型名称的所有后代(直接子项,子项的子项等)。

Document.getElementsByTagNameNS(namespaceURI,localName )
使用特定的名称空间URI和localname搜索所有后代(直接子项,子项的子项等)。localname是前缀后命名空间的一部分。

6、元素对象

Element是它的子类Node,因此继承该类的所有属性。

Element.tagName
元素类型名称。在使用命名空间的文档中,它可能包含冒号。该值是一个字符串。

Element.getElementsByTagName(tagName )
与类中的等效方法相同Document。

Element.getElementsByTagNameNS(namespaceURI,localName )
与类中的等效方法相同Document。

Element.hasAttribute(name)
如果元素具有按名称命名的属性,则返回true 。

Element.hasAttributeNS(namespaceURI,localName )
如果元素具有namespaceURI和 localName命名的属性,则返回true 。

Element.getAttribute(name)
将name命名的属性的值作为字符串返回。如果不存在此类属性,则返回空字符串,就好像该属性没有值一样。

Element.getAttributeNode(attrname )
返回Attr由attrname命名的属性的节点。

Element.getAttributeNS(namespaceURI,localName )
将namespaceURI和localName指定的属性的值作为字符串返回。如果不存在此类属性,则返回空字符串,就好像该属性没有值一样。

Element.getAttributeNodeNS(namespaceURI,localName )
给定namespaceURI和localName,将属性值作为节点返回。

Element.removeAttribute(name)
按名称删除属性。如果没有匹配的属性, NotFoundErr则引发。

Element.removeAttributeNode(oldAttr )
从属性列表中删除并返回oldAttr(如果存在)。如果oldAttr不存在,NotFoundErr则引发。

Element.removeAttributeNS(namespaceURI,localName )
按名称删除属性。请注意,它使用localName,而不是qname。如果没有匹配的属性,则不会引发异常。

Element.setAttribute(名称,价值)
从字符串设置属性值。

Element.setAttributeNode(newAttr )
向元素添加新属性节点,如果name属性匹配,则在必要时替换现有属性。如果发生替换,将返回旧的属性节点。如果newAttr已经在使用中, InuseAttributeErr将会被提升。

Element.setAttributeNodeNS(newAttr )
向元素添加新属性节点,如果namespaceURI和localName属性匹配,则在必要时替换现有属性。如果发生替换,将返回旧的属性节点。如果newAttr 已经在使用中,InuseAttributeErr将会被提升。

Element.setAttributeNS(namespaceURI,qname,value )
给定namespaceURI和qname,从字符串设置属性值。请注意,qname是整个属性名称。这与上述不同。

7、Attr对象

Attr继承自Node,因此继承其所有属性。

Attr.name
属性名称。在使用命名空间的文档中,它可能包含冒号。

Attr.localName
如果有冒号,则冒号后面的名称部分,否则为整个名称。这是一个只读属性。

Attr.prefix
冒号前面的名称部分(如果有),否则为空字符串。

Attr.value
属性的文本值。这是nodeValue属性的同义词 。

8、NamedNodeMap对象

NamedNodeMap并没有继承Node。

NamedNodeMap.length
属性列表的长度。

NamedNodeMap.item(index)
返回具有特定索引的属性。获得属性的顺序是任意的,但在DOM的生命周期中是一致的。每个项目都是一个属性节点。使用value属性获取其值。

9、注释对象

Comment表示XML文档中的注释。它是子类 Node,但不能有子节点。

Comment.data
注释的内容为字符串。

10、文本和CDATASection对象

该Text接口表示XML文档中的文本。
如果解析器和DOM实现支持DOM的XML扩展,则CDATA标记部分中包含的部分文本存储在CDATASection对象中。
这两个接口是相同的,但为nodeType属性提供了不同的值 。

这些接口扩展了Node接口。他们不能拥有子节点。

Text.data
文本节点的内容为字符串。

11、ProcessingInstruction对象

表示XML文档中的处理指令; 这继承自 Node接口,不能有子节点。

ProcessingInstruction.target
处理指令的内容直到第一个空白字符。【只读属性】

ProcessingInstruction.data
第一个空白字符后面的处理指令的内容。

12、异常

DOMException: DOMException实例携带一个code属性,为特定异常提供适当的值。

异常xml.dom.DOMException
用于所有特定DOM异常的基本异常类。此异常类无法直接实例化。

异常xml.dom.DomstringSizeErr
当指定范围的文本不适合字符串时引发。这不知道在Python DOM实现中使用,但可以从不是用Python编写的DOM实现接收。

异常xml.dom.HierarchyRequestErr
尝试插入不允许节点类型的节点时引发。

异常xml.dom.IndexSizeErr
当方法的索引或大小参数为负或超过允许值时引发。

异常xml.dom.InuseAttributeErr
尝试插入Attr已存在于文档中其他位置的节点时触发。

异常xml.dom.InvalidAccessErr
如果底层对象不支持参数或操作,则引发此异常。

异常xml.dom.InvalidCharacterErr
当字符串参数包含XML 1.0建议中使用的上下文中不允许的字符时,会引发此异常。例如,尝试Element使用元素类型名称中的空格创建节点将导致引发此错误。

异常xml.dom.InvalidModificationErr
尝试修改节点类型时引发。

异常xml.dom.InvalidStateErr
尝试使用未定义或不再可用的对象时引发。

异常xml.dom.NamespaceErr
如果尝试以XML 建议中的命名空间不允许的方式更改任何对象,则会引发此异常。

异常xml.dom.NotFoundErr
引用的上下文中不存在节点时的异常。
例如,NamedNodeMap.removeNamedItem()如果传入的节点在地图中不存在, 则会引发此问题。

异常xml.dom.NotSupportedErr
当实现不支持所请求的对象或操作类型时引发。

异常xml.dom.NoDataAllowedErr
如果为不支持数据的节点指定了数据,则会引发此问题。

异常xml.dom.NoModificationAllowedErr
尝试修改不允许修改的对象(例如只读节点)时引发。

异常xml.dom.SyntaxErr
指定无效或非法字符串时引发。

异常xml.dom.WrongDocumentErr
当节点插入与其当前所属的文档不同的文档时引发,并且该实现不支持将节点从一个文档迁移到另一个文档。

DOM建议中定义的异常代码根据此表映射到上述异常:

Constant Exception
DOMSTRING_SIZE_ERR DomstringSizeErr
HIERARCHY_REQUEST_ERR HierarchyRequestErr
INDEX_SIZE_ERR IndexSizeErr
INUSE_ATTRIBUTE_ERR InuseAttributeErr
INVALID_ACCESS_ERR InvalidAccessErr
INVALID_CHARACTER_ERR InvalidCharacterErr
INVALID_MODIFICATION_ERR InvalidModificationErr
INVALID_STATE_ERR InvalidStateErr
NAMESPACE_ERR NamespaceErr
NOT_FOUND_ERR NotFoundErr
NOT_SUPPORTED_ERR NotSupportedErr
NO_DATA_ALLOWED_ERR NoDataAllowedErr
NO_MODIFICATION_ALLOWED_ERR NoModificationAllowedErr
SYNTAX_ERR SyntaxErr
WRONG_DOCUMENT_ERR WrongDocumentErr

你可能感兴趣的:(Python基础)