xml.dom——文档对象模型API
Posted xie仗剑天涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml.dom——文档对象模型API相关的知识,希望对你有一定的参考价值。
文档对象模型,或者“DOM”,是一个跨语言API的World Wide Web Consortium(W3C)来访问和修改XML文档。DOM的实现提供了一个XML文档树结构,或允许客户机代码从头开始建立这样一个结构。然后给访问结构通过一组对象提供著名的接口。
模块内容
xml.dom
包含以下功能:
xml.dom.
registerDOMImplementation
(name,factory)-
注册factory函数名称的名称。factory函数应该返回一个对象实现
DOMImplementation
接口。factory函数可以返回相同的对象,或为每个调用一个新的,适合特定的实现(例如,如果该实现支持一些定制)。
xml.dom.
getDOMImplementation
(name =None,features=())-
返回一个合适的DOM实现。这个名字是众所周知,DOM实现的模块名称,或者
None
。如果它不是None
,进口并返回相应的模块DOMImplementation
如果导入成功。如果没有名字,如果环境变量PYTHON_DOM
设置,该变量用于找到实现。如果名字不是给定的,这个检查可用的实现找到所需的特性。如果没有实现可以被发现,增加一个
ImportError
。的功能列表必须是一个序列(feature, version)
对传递到hasFeature()
方法可用DOMImplementation
对象。
还提供了一些方便的常量:
xml.dom.
EMPTY_NAMESPACE
-
没有名称空间的值用来表示与DOM节点。这通常是发现的
namespaceURI
一个节点,或者用作namespaceURI namespaces-specific方法参数。
xml.dom.
XML_NAMESPACE
-
保留前缀的名称空间URI
xml
所定义的XML名称空间(第四节)。
xml.dom.
XMLNS_NAMESPACE
-
定义的名称空间声明的名称空间URI文档对象模型(DOM)二级核心规范(部分1.1.8)。
xml.dom.
Xhtml_NAMESPACE
-
XHTML名称空间的URI所定义的XHTML 1.0:可扩展超文本标记语言(3.1.1节)。
此外, xml.dom
包含一个基地 Node
类和DOM异常类。的 Node
这个模块提供的类没有实现任何方法或属性定义为DOM规范;混凝土DOM实现必须提供这些。的 Node
类提供这个模块提供使用的常量 nodeType
在具体的属性 Node
对象,它们位于类而不是在模块级别符合DOM规范。
DOM中的对象
的文档DOM从W3C DOM规范。
注意,也可以操纵DOM属性节点,而不是简单的字符串。这是相当罕见的,你必须这样做,然而,这个用法是没有记录的。
接口 | 部分 | 目的 |
---|---|---|
DOMImplementation |
DOMImplementation对象 | 接口底层实现。 |
Node |
节点对象 | 基地的大多数对象接口文档。 |
NodeList |
节点列表对象 | 接口节点序列。 |
DocumentType |
DocumentType对象 | 关于声明过程文档所需的信息。 |
Document |
文档对象 | 对象代表一???完整的文档。 |
Element |
元素对象 | 文档中的元素节点的层次结构。 |
Attr |
Attr对象 | 属性值节点元素节点。 |
Comment |
评论的对象 | 源文档中表示的评论。 |
Text |
文本和CDATASection对象 | 从文档中包含文本内容的节点。 |
ProcessingInstruction |
ProcessingInstruction对象 | 处理指令的表示。 |
一个额外的部分描述定义的异常处理DOM在Python中。
DOMImplementation对象
的 DOMImplementation
接口应用程序提供了一种方法来确定特定功能的可用性在DOM中使用。DOM级别2添加创建新的能力 Document
和 DocumentType
对象的使用 DOMImplementation
。
DOMImplementation.
hasFeature
(特性,版本)-
返回true,如果特性由一对字符串标识功能和版本实现。
DOMImplementation.
createDocument
(namespaceUri qualifiedName,文档类型)-
返回一个新的
Document
对象(DOM)的根源,一个孩子Element
对象在给定namespaceUri和qualifiedName。文档类型必须是一个DocumentType
创建的对象createDocumentType()
,或None
。在Python DOM API,前两个参数也可以None
为了表明没有Element
孩子是要创建。
DOMImplementation.
createDocumentType
(qualifiedName publicId,systemId)-
返回一个新的
DocumentType
对象,该对象封装了给定qualifiedName publicId,systemId字符串,表示XML文档类型声明中包含的信息。
节点对象
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
对象或None
。为Element
节点,这将是父元素,除了根元素,在这种情况下,这将是Document
对象。为Attr
节点,这总是None
。这是一个只读属性。
Node.
attributes
-
一个
NamedNodeMap
对象的属性。只有元素实际值;其他人提供None
这个属性。这是一个只读属性。
Node.
previousSibling
-
立即的节点之前这一相同的父母。例如元素结束标记之前自我元素的开始标记。当然,不仅仅是元素的XML文档是由所以前面的兄弟姐妹可以是文本、注释,或者其他东西。如果这个节点是父母的第一个孩子,这个属性
None
。这是一个只读属性。
Node.
nextSibling
-
节点立即遵循这一相同的父母。另请参阅
previousSibling
。如果这是最后一个孩子的家长,这个属性None
。这是一个只读属性。
Node.
childNodes
-
包含在这个节点的节点列表。这是一个只读属性。
Node.
firstChild
-
的第一个子节点,如果有任何,或
None
。这是一个只读属性。
Node.
lastChild
-
的最后一个孩子节点,如果有任何,或
None
。这是一个只读属性。
Node.
localName
-
的部分
tagName
冒号后如果有一个,否则整个tagName
。值是一个字符串。
Node.
prefix
-
的部分
tagName
冒号前如果有一个,其他的空字符串。值是一个字符串,或None
.
Node.
namespaceURI
-
名称空间相关联的元素名称。这将是一个字符串或
None
。这是一个只读属性。
Node.
nodeName
-
这为每个节点类型都有不同的意义;有关详细信息,请参阅DOM规范。你总是可以得到的信息会从另一个属性等
tagName
属性或元素name
属性的属性。对于所有的节点类型,该属性的值将一个字符串或None
。这是一个只读属性。
Node.
nodeValue
-
这为每个节点类型都有不同的意义;有关详细信息,请参阅DOM规范。这种情况是类似的
nodeName
。该值是一个字符串None
.
Node.
hasAttributes
()-
如果节点有任何属性返回true。
Node.
hasChildNodes
()-
如果节点有子节点返回true。
Node.
isSameNode
(其他)-
返回true,如果其他指的是相同的节点,这个节点。这是特别有用的DOM实现,使用任何形式的代理体系结构(因为超过一个对象可以引用相同的节点)。
请注意
这是提出基于DOM Level 3 API仍然在“工作草案”阶段,但这个特殊的界面出现争议。改变从W3C不一定会影响这种方法在Python DOM接口(尽管任何新的W3C API也会支持)。
Node.
appendChild
(newChild)-
添加一个新的子节点,该节点的孩子的列表,返回newChild。如果节点已经在树上,它首先被移除。
Node.
insertBefore
(newChild,refChild)-
现有的孩子之前插入一个新的子节点。必须这样,refChild是该节点的孩子;如果不是,
ValueError
是提高。newChild返回。如果refChildNone
,它的末尾插入newChild儿童名单。
Node.
removeChild
(oldChild)-
删除一个子节点。oldChild必须该节点的孩子;如果不是,
ValueError
是提高。oldChild成功返回。如果oldChild不会进一步使用,其unlink()
方法应该调用。
Node.
replaceChild
(newChild,oldChild)-
用一个新节点替换现有的节点。必须这样,oldChild是该节点的孩子;如果不是,
ValueError
是提高。
Node.
normalize
()-
连接相邻的文本节点,这样所有的文本被存储为单身
Text
实例。这种简化处理文本从DOM树对于许多应用程序。
Node.
cloneNode
(深)-
克隆这个节点。设置深度意味着克隆所有子节点。这返回克隆。
节点列表对象
一个 NodeList
代表一个节点序列。使用这些对象以两种方式在DOM核心推荐:一个 Element
对象提供了一个作为它的子节点列表,和getElementsByTagName()
和 getElementsByTagNameNS()
的方法 Node
返回查询结果对象与该接口表示。
DOM级别2建议为这些对象定义一个方法和一个属性:
NodeList.
item
(我)-
返回第i个项的序列,如果有一个,或者
None
。指标我不允许小于零个或大于或等于序列的长度。
NodeList.
length
-
的节点数量的序列。
此外,Python DOM接口要求提供了一些额外的支持允许 NodeList
作为Python对象序列。所有 NodeList
实现必须包括支持 __len__()
和 __getitem__()
这允许迭代 NodeList
在 for
语句和适当的支持 len()
内置函数。
如果一个DOM实现支持文档的修改, NodeList
实现也必须支持 __setitem__()
和 __delitem__()
方法。
DocumentType对象
的信息符号和实体声明的文件(包括外部子集如果解析器使用它,可以提供信息)从一个可用 DocumentType
对象。的 DocumentType
可以从一个文档Document
对象的 doctype
属性,如果没有 DOCTYPE
宣言的文档,文档的 doctype
属??将被设置为 None
而不是这个接口的一个实例。
DocumentType
是一个专业化的 Node
,并添加以下属性:
DocumentType.
publicId
-
外部的公共标识文档类型定义的子集。这将是一个字符串或
None
.
DocumentType.
systemId
-
系统标识符的外部文档类型定义的子集。这将是一个URI作为字符串,或
None
.
DocumentType.
internalSubset
-
一个字符串从文档中提供完整的内部子集。这个不包括括号附上子集。如果文档没有内部子集,这应该是
None
.
DocumentType.
name
-
根元素的名称了
DOCTYPE
声明,如果存在。
DocumentType.
entities
-
这是一个
NamedNodeMap
给外部实体的定义。不止一次定义的实体名称,只有第一个定义提供所需的(忽略其他XML推荐)。这可能是None
如果没有提供的信息解析器,或如果没有实体的定义。
DocumentType.
notations
-
这是一个
NamedNodeMap
符号的定义。符号名称定义不止一次,只提供第一个定义(忽略其他XML推荐)的要求。这可能是None
如果没有提供的信息解析器,或如果没有定义的符号。
文档对象
一个 Document
代表整个XML文档,包括它的组成元素、属性、处理指令、注释等等。请记住,它继承属性 Node
.
Document.
documentElement
-
唯一的文档的根元素。
Document.
createElement
(tagName)-
创建并返回一个新的元素节点。元素没有插入到文档时创建的。您需要显式地插入等其他方法之一
insertBefore()
或appendChild()
.
Document.
createElementNS
(namespaceURI,tagName)-
创建并返回一个新元素和一个名称空间。tagName可能有一个前缀。元素没有插入到文档时创建的。您需要显式地插入等其他方法之一
insertBefore()
或appendChild()
.
Document.
createTextNode
(数据)-
创建并返回一个包含数据作为参数传递的文本节点。与其他创建方法,这个不将节点插入到树中。
Document.
createComment
(数据)-
创建并返回一个包含数据作为参数传递的注释节点。与其他创建方法,这个不将节点插入到树中。
Document.
createProcessingInstruction
(目标,数据)-
创建并返回一个包含目标和??据处理指令节点作为参数传递。与其他创建方法,这个不将节点插入到树中。
Document.
createAttribute
(的名字)-
创建并返回一个属性节点。这种方法不与任何特定元素关联属性节点。你必须使用
setAttributeNode()
在适当的Element
使用新创建的属性实例对象。
Document.
createAttributeNS
(namespaceURI,qualifiedName)-
创建并返回一个与一个名称空间属性节点。tagName可能有一个前缀。这种方法不与任何特定元素关联属性节点。你必须使用
setAttributeNode()
在适当的Element
使用新创建的属性实例对象。
Document.
getElementsByTagName
(tagName)-
搜索所有的后代(直接的孩子,孩子的孩子,等等)与一个特定的元素类型名。
Document.
getElementsByTagNameNS
(namespaceURI,localName)-
搜索所有的后代(直接的孩子,孩子的孩子,等等)与一个特定的名称空间URI和localname。localname是名称空间前缀后的一部分。
元素对象
Element
是一个子类 Node
,所以继承这个类的所有属性。
Element.
tagName
-
元素类型名。在使用文档,它可能有冒号。值是一个字符串。
Element.
getElementsByTagName
(tagName)-
与等效方法相???
Document
类。
Element.
getElementsByTagNameNS
(namespaceURI,localName)-
与等效方法相???
Document
类。
Element.
hasAttribute
(的名字)-
返回true,如果元素有一个属性的名字命名。
Element.
hasAttributeNS
(namespaceURI,localName)-
返回true,如果由namespaceURI和localName元素有一个属性命名。
Element.
getAttribute
(的名字)-
返回该属性的值指定的名字作为一个字符串。如果没有这样的属性存在,则返回一个空字符串,如果属性没有价值。
Element.
getAttributeNode
(attrname)-
返回
Attr
被attrname节点的属性。
Element.
getAttributeNS
(namespaceURI,localName)-
返回属性的值被namespaceURI和localName为字符串。如果没有这样的属性存在,则返回一个空字符串,如果属性没有价值。
Element.
getAttributeNodeNS
(namespaceURI,localName)-
返回属性值作为一个节点,namespaceURI和localName。
Element.
removeAttribute
(的名字)-
删除一个属性的名字。如果没有匹配的属性,一个
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,价值)-
设置一个属性值从一个字符串,namespaceURI和qname。注意,qname是整个属性名称。这是不同的。
Attr对象
Attr
继承自 Node
,所以继承了它的所有属性。
Attr.
name
-
属性名称。在使用文档,它可能包含一个冒号。
Attr.
localName
-
冒号后的名称的一部分,如果有一个,其他的整个名字。这是一个只读属性。
Attr.
prefix
-
冒号前的名字的一部分,如果有一个,其他的空字符串。
Attr.
value
-
属性的文本值。这是一个同义词
nodeValue
属性。
NamedNodeMap对象
NamedNodeMap
不继承 Node
.
NamedNodeMap.
length
-
属性列表的长度。
NamedNodeMap.
item
(指数)-
返回一个与特定索引的属性。订单得到属性是任意但将为DOM的生活是一致的。每个条目是一个属性节点。获得它的价值的
value
属性。
也有一些实验方法,给这门课更多的映射行为。您可以使用它们,或者你可以使用标准化 getAttribute*()
家庭的方法 Element
对象。
文本和CDATASection对象
的 Text
接口表示XML文档中的文本。如果解析器和DOM实现支持DOM的XML扩展的部分文本存储在封闭在CDATA部分 CDATASection
对象。这两个接口是相同的,但提供不同的值 nodeType
属性。
这些接口扩展 Node
接口。他们不能有子节点。
Text.
data
-
文本节点的内容为字符串。
请注意
的使用 CDATASection
节点并不表明,节点代表一个完整的CDATA标记部分,只有节点的内容是一个CDATA区域的一部分。一个CDATA区域可能是由多个节点在文档树中。没有办法确定是否两个相邻 CDATASection
节点代表不同的CDATA标记部分。
ProcessingInstruction对象
代表了XML文档的处理指令,这继承的 Node
接口和不能有子节点。
ProcessingInstruction.
target
-
处理指令的内容,第一个空格字符。这是一个只读属性。
ProcessingInstruction.
data
-
处理指令的内容后第一个空格字符。
异常
DOM级别2建议定义了一个例外, DOMException
和一些常量,允许应用程序以确定什么样的错误发生。 DOMException
携带一个实例 code
提供适当的值的属性为特定的例外。
Python DOM接口提供了常数,也扩展了组异常这样一个特定的异常存在的异常代码定义的DOM。实现必须提高适当的具体的例外,每一个都有适当的值code
属性。
- 异常
xml.dom.
DOMException
-
基地异常类用于所有特定的DOM例外。这个异常类不能直接实例化。
- 异常
xml.dom.
DomstringSizeErr
-
长大当一个指定范围的文本不符合一个字符串。这不是在Python中使用DOM实现,但不可能收到DOM实现用Python编写的。
- 异常
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建议上述例外情况根据这个表:
常数 | 异常 |
---|---|
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 DOM API之间的关系,W3C DOM的建议,和Python的OMG IDL映射。
类型映射
DOM规范中使用的IDL类型被映射到Python类型根据下表。
IDL类型 | Python类型 |
---|---|
boolean |
bool 或 int |
int |
int |
long int |
int |
unsigned int |
int |
DOMString |
str 或 bytes |
null |
None |
访问器方法
从OMG IDL映射到Python IDL定义访问器函数 attribute
声明的Java映射方式。将IDL映射声明
readonlyattributestringsomeValue;attributestringanotherValue;
收益率三个访问器功能:“获得”的方法 someValue
(_get_someValue()
),“得到”和“组”的方法 anotherValue
(_get_anotherValue()
和_set_anotherValue()
)。特别是映射,不要求IDL属性可以正常访问Python属性: object.someValue
不需要工作,可以提高一个吗 AttributeError
.
然而,Python DOM API并要求正常属性访问工作。这意味着Python IDL编译器生成的典型的代理不可能去工作,和包装器对象可能需要在客户端如果通过CORBA访问DOM对象。虽然这确实需要一些额外的考虑CORBA DOM客户,Python的实现者使用DOM在CORBA与经验不考虑这一个问题。属性声??? readonly
不得限制在所有DOM实现写访问。
在Python DOM API,访问器功能不需要。如果提供,他们应该采取的形式定义的Python IDL映射,但这些方法被认为是不必要的,因为可直接从Python的属性。“套”访问器不应提供 readonly
属性。
IDL定义不充分体现W3C DOM API的要求,如某些对象的概念,如的返回值 getElementsByTagName()
,“活”。Python DOM API不需要执行这些要求的实现。
参考: https://docs.python.org/3/library/xml.dom.html
以上是关于xml.dom——文档对象模型API的主要内容,如果未能解决你的问题,请参考以下文章
评论的对象
Comment
代表一个评论在XML文档。它的一个子类Node
,但不能有子节点。Comment.
data
评论的内容为字符串。领导之间的属性包含所有字符
<!-
-
和落后-
->
,但不包括他们。