文档对象模型,或者“DOM”,是一个跨语言API的World Wide Web Consortium(W3C)来访问和修改XML文档。DOM的实现提供了一个XML文档树结构,或允许客户机代码从头开始建立这样一个结构。然后给访问结构通过一组对象提供著名的接口。
模块内容
包含以下功能:
-
注册factory函数名称的名称。factory函数应该返回一个对象实现
DOMImplementation
接口。factory函数可以返回相同的对象,或为每个调用一个新的,适合特定的实现(例如,如果该实现支持一些定制)。
xml.dom.
registerDOMImplementation
(name,factory) -
返回一个合适的DOM实现。这个名字是众所周知,DOM实现的模块名称,或者
None
。如果它不是None
,进口并返回相应的模块DOMImplementation
如果导入成功。如果没有名字,如果环境变量PYTHON_DOM
设置,该变量用于找到实现。如果名字不是给定的,这个检查可用的实现找到所需的特性。如果没有实现可以被发现,增加一个。的功能列表必须是一个序列
(feature, version)
对传递到hasFeature()
方法可用DOMImplementation
对象。
xml.dom.
getDOMImplementation
(name =None,features=()) 还提供了一些方便的常量:
-
没有名称空间的值用来表示与DOM节点。这通常是发现的
namespaceURI
一个节点,或者用作namespaceURI namespaces-specific方法参数。
xml.dom.
EMPTY_NAMESPACE
-
保留前缀的名称空间URI
xml
所定义的(第四节)。
xml.dom.
XML_NAMESPACE
-
定义的名称空间声明的名称空间URI(部分1.1.8)。
xml.dom.
XMLNS_NAMESPACE
-
XHTML名称空间的URI所定义的(3.1.1节)。
xml.dom.
XHTML_NAMESPACE
此外,包含一个基地 Node
类和DOM异常类。的 Node
这个模块提供的类没有实现任何方法或属性定义为DOM规范;混凝土DOM实现必须提供这些。的 Node
类提供这个模块提供使用的常量 nodeType
在具体的属性 Node
对象,它们位于类而不是在模块级别符合DOM规范。
DOM中的对象
的文档DOM从W3C DOM规范。
注意,也可以操纵DOM属性节点,而不是简单的字符串。这是相当罕见的,你必须这样做,然而,这个用法是没有记录的。
接口 | 部分 | 目的 |
---|---|---|
DOMImplementation | 接口底层实现。 | |
Node | 基地的大多数对象接口文档。 | |
NodeList | 接口节点序列。 | |
DocumentType | 关于声明过程文档所需的信息。 | |
Document | 对象代表一���完整的文档。 | |
Element | 文档中的元素节点的层次结构。 | |
Attr | 属性值节点元素节点。 | |
Comment | 源文档中表示的评论。 | |
Text | 从文档中包含文本内容的节点。 | |
ProcessingInstruction | 处理指令的表示。 |
一个额外的部分描述定义的异常处理DOM在Python中。
DOMImplementation对象
的 DOMImplementation
接口应用程序提供了一种方法来确定特定功能的可用性在DOM中使用。DOM级别2添加创建新的能力 Document
和 DocumentType
对象的使用 DOMImplementation
。
-
返回true,如果特性由一对字符串标识功能和版本实现。
DOMImplementation.
hasFeature
(特性,版本) -
返回一个新的
Document
对象(DOM)的根源,一个孩子Element
对象在给定namespaceUri和qualifiedName。文档类型必须是一个DocumentType
创建的对象,或None
。在Python DOM API,前两个参数也可以None
为了表明没有Element
孩子是要创建。
DOMImplementation.
createDocument
(namespaceUri qualifiedName,文档类型) -
返回一个新的
DocumentType
对象,该对象封装了给定qualifiedName publicId,systemId字符串,表示XML文档类型声明中包含的信息。
DOMImplementation.
createDocumentType
(qualifiedName publicId,systemId) 节点对象
XML文档的所有组件的子类 Node
.
-
一个整数代表节点类型。符号常量的类型
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.
nodeType
-
当前节点的父,或
None
文档节点。始终是一个价值Node
对象或None
。为Element
节点,这将是父元素,除了根元素,在这种情况下,这将是Document
对象。为Attr
节点,这总是None
。这是一个只读属性。
Node.
parentNode
-
一个
NamedNodeMap
对象的属性。只有元素实际值;其他人提供None
这个属性。这是一个只读属性。
Node.
attributes
-
立即的节点之前这一相同的父母。例如元素结束标记之前自我元素的开始标记。当然,不仅仅是元素的XML文档是由所以前面的兄弟姐妹可以是文本、注释,或者其他东西。如果这个节点是父母的第一个孩子,这个属性
None
。这是一个只读属性。
Node.
previousSibling
-
节点立即遵循这一相同的父母。另请参阅。如果这是最后一个孩子的家长,这个属性
None
。这是一个只读属性。
Node.
nextSibling
-
包含在这个节点的节点列表。这是一个只读属性。
Node.
childNodes
-
的第一个子节点,如果有任何,或
None
。这是一个只读属性。
Node.
firstChild
-
的最后一个孩子节点,如果有任何,或
None
。这是一个只读属性。
Node.
lastChild
-
的部分
tagName
冒号后如果有一个,否则整个tagName
。值是一个字符串。
Node.
localName
-
的部分
tagName
冒号前如果有一个,其他的空字符串。值是一个字符串,或None
.
Node.
prefix
-
名称空间相关联的元素名称。这将是一个字符串或
None
。这是一个只读属性。
Node.
namespaceURI
-
这为每个节点类型都有不同的意义;有关详细信息,请参阅DOM规范。你总是可以得到的信息会从另一个属性等
tagName
属性或元素name
属性的属性。对于所有的节点类型,该属性的值将一个字符串或None
。这是一个只读属性。
Node.
nodeName
-
这为每个节点类型都有不同的意义;有关详细信息,请参阅DOM规范。这种情况是类似的。该值是一个字符串
None
.
Node.
nodeValue
-
如果节点有任何属性返回true。
Node.
hasAttributes
() -
如果节点有子节点返回true。
Node.
hasChildNodes
() -
返回true,如果其他指的是相同的节点,这个节点。这是特别有用的DOM实现,使用任何形式的代理体系结构(因为超过一个对象可以引用相同的节点)。
请注意
这是提出基于DOM Level 3 API仍然在“工作草案”阶段,但这个特殊的界面出现争议。改变从W3C不一定会影响这种方法在Python DOM接口(尽管任何新的W3C API也会支持)。
Node.
isSameNode
(其他) -
添加一个新的子节点,该节点的孩子的列表,返回newChild。如果节点已经在树上,它首先被移除。
Node.
appendChild
(newChild) -
现有的孩子之前插入一个新的子节点。必须这样,refChild是该节点的孩子;如果不是,是提高。newChild返回。如果refChild
None
,它的末尾插入newChild儿童名单。
Node.
insertBefore
(newChild,refChild) -
删除一个子节点。oldChild必须该节点的孩子;如果不是,是提高。oldChild成功返回。如果oldChild不会进一步使用,其
unlink()
方法应该调用。
Node.
removeChild
(oldChild) -
用一个新节点替换现有的节点。必须这样,oldChild是该节点的孩子;如果不是,是提高。
Node.
replaceChild
(newChild,oldChild) -
连接相邻的文本节点,这样所有的文本被存储为单身
Text
实例。这种简化处理文本从DOM树对于许多应用程序。
Node.
normalize
() -
克隆这个节点。设置深度意味着克隆所有子节点。这返回克隆。
Node.
cloneNode
(深) 节点列表对象
一个 NodeList
代表一个节点序列。使用这些对象以两种方式在DOM核心推荐:一个 Element
对象提供了一个作为它的子节点列表,和getElementsByTagName()
和 getElementsByTagNameNS()
的方法 Node
返回查询结果对象与该接口表示。
DOM级别2建议为这些对象定义一个方法和一个属性:
-
返回第i个项的序列,如果有一个,或者
None
。指标我不允许小于零个或大于或等于序列的长度。
NodeList.
item
(我) -
的节点数量的序列。
NodeList.
length
此外,Python DOM接口要求提供了一些额外的支持允许 NodeList
作为Python对象序列。所有 NodeList
实现必须包括支持和这允许迭代 NodeList
在语句和适当的支持内置函数。
如果一个DOM实现支持文档的修改, NodeList
实现也必须支持和方法。
DocumentType对象
的信息符号和实体声明的文件(包括外部子集如果解析器使用它,可以提供信息)从一个可用 DocumentType
对象。的 DocumentType
可以从一个文档Document
对象的 doctype
属性,如果没有 DOCTYPE
宣言的文档,文档的 doctype
属��将被设置为 None
而不是这个接口的一个实例。
DocumentType
是一个专业化的 Node
,并添加以下属性:
-
外部的公共标识文档类型定义的子集。这将是一个字符串或
None
.
DocumentType.
publicId
-
系统标识符的外部文档类型定义的子集。这将是一个URI作为字符串,或
None
.
DocumentType.
systemId
-
一个字符串从文档中提供完整的内部子集。这个不包括括号附上子集。如果文档没有内部子集,这应该是
None
.
DocumentType.
internalSubset
-
根元素的名称了
DOCTYPE
声明,如果存在。
DocumentType.
name
-
这是一个
NamedNodeMap
给外部实体的定义。不止一次定义的实体名称,只有第一个定义提供所需的(忽略其他XML推荐)。这可能是None
如果没有提供的信息解析器,或如果没有实体的定义。
DocumentType.
entities
-
这是一个
NamedNodeMap
符号的定义。符号名称定义不止一次,只提供第一个定义(忽略其他XML推荐)的要求。这可能是None
如果没有提供的信息解析器,或如果没有定义的符号。
DocumentType.
notations
文档对象
一个 Document
代表整个XML文档,包括它的组成元素、属性、处理指令、注释等等。请记住,它继承属性 Node
.
-
唯一的文档的根元素。
Document.
documentElement
-
创建并返回一个新的元素节点。元素没有插入到文档时创建的。您需要显式地插入等其他方法之一
insertBefore()
或appendChild()
.
Document.
createElement
(tagName) -
创建并返回一个新元素和一个名称空间。tagName可能有一个前缀。元素没有插入到文档时创建的。您需要显式地插入等其他方法之一
insertBefore()
或appendChild()
.
Document.
createElementNS
(namespaceURI,tagName) -
创建并返回一个包含数据作为参数传递的文本节点。与其他创建方法,这个不将节点插入到树中。
Document.
createTextNode
(数据) -
创建并返回一个包含数据作为参数传递的注释节点。与其他创建方法,这个不将节点插入到树中。
Document.
createComment
(数据) -
创建并返回一个包含目标和��据处理指令节点作为参数传递。与其他创建方法,这个不将节点插入到树中。
Document.
createProcessingInstruction
(目标,数据) -
创建并返回一个属性节点。这种方法不与任何特定元素关联属性节点。你必须使用
setAttributeNode()
在适当的Element
使用新创建的属性实例对象。
Document.
createAttribute
(的名字) -
创建并返回一个与一个名称空间属性节点。tagName可能有一个前缀。这种方法不与任何特定元素关联属性节点。你必须使用
setAttributeNode()
在适当的Element
使用新创建的属性实例对象。
Document.
createAttributeNS
(namespaceURI,qualifiedName) -
搜索所有的后代(直接的孩子,孩子的孩子,等等)与一个特定的元素类型名。
Document.
getElementsByTagName
(tagName) -
搜索所有的后代(直接的孩子,孩子的孩子,等等)与一个特定的名称空间URI和localname。localname是名称空间前缀后的一部分。
Document.
getElementsByTagNameNS
(namespaceURI,localName) 元素对象
Element
是一个子类 Node
,所以继承这个类的所有属性。
-
元素类型名。在使用文档,它可能有冒号。值是一个字符串。
Element.
tagName
-
与等效方法相���
Document
类。
Element.
getElementsByTagName
(tagName) -
与等效方法相���
Document
类。
Element.
getElementsByTagNameNS
(namespaceURI,localName) -
返回true,如果元素有一个属性的名字命名。
Element.
hasAttribute
(的名字) -
返回true,如果由namespaceURI和localName元素有一个属性命名。
Element.
hasAttributeNS
(namespaceURI,localName) -
返回该属性的值指定的名字作为一个字符串。如果没有这样的属性存在,则返回一个空字符串,如果属性没有价值。
Element.
getAttribute
(的名字) -
返回
Attr
被attrname节点的属性。
Element.
getAttributeNode
(attrname) -
返回属性的值被namespaceURI和localName为字符串。如果没有这样的属性存在,则返回一个空字符串,如果属性没有价值。
Element.
getAttributeNS
(namespaceURI,localName) -
返回属性值作为一个节点,namespaceURI和localName。
Element.
getAttributeNodeNS
(namespaceURI,localName) -
删除一个属性的名字。如果没有匹配的属性,一个是提高。
Element.
removeAttribute
(的名字) -
删除并返回oldAttr属性列表,如果存在。如果oldAttr不存在,是提高。
Element.
removeAttributeNode
(oldAttr) -
删除一个属性的名字。注意,它使用一个localName,不是一个qname。不例外是���果没有匹配的属性。
Element.
removeAttributeNS
(namespaceURI,localName) -
从一个字符串设置一个属性值。
Element.
setAttribute
(的名字,价值) -
添加一个新的属性节点元素,取代现有的属性如果必要的
name
属性匹配。如果发生更换,旧的属性节点将被归还。如果newAttr已经被使用,将会提高。
Element.
setAttributeNode
(newAttr) -
添加一个新的属性节点元素,取代现有的属性如果必要的
namespaceURI
和localName
属性匹配。如果发生更换,旧的属性节点将被归还。如果newAttr已经被使用,将会提高。
Element.
setAttributeNodeNS
(newAttr) -
设置一个属性值从一个字符串,namespaceURI和qname。注意,qname是整个属性名称。这是不同的。
Element.
setAttributeNS
(namespaceURI qname,价值) Attr对象
Attr
继承自 Node
,所以继承了它的所有属性。
-
属性名称。在使用文档,它可能包含一个冒号。
Attr.
name
-
冒号后的名称的一部分,如果有一个,其他的整个名字。这是一个只读属性。
Attr.
localName
-
冒号前的名字的一部分,如果有一个,其他的空字符串。
Attr.
prefix
-
属性的文本值。这是一个同义词
nodeValue
属性。
Attr.
value
NamedNodeMap对象
NamedNodeMap
不继承 Node
.
-
属性列表的长度。
NamedNodeMap.
length
-
返回一个与特定索引的属性。订单得到属性是任意但将为DOM的生活是一致的。每个条目是一个属性节点。获得它的价值的
value
属性。
NamedNodeMap.
item
(指数) 也有一些实验方法,给这门课更多的映射行为。您可以使用它们,或者你可以使用标准化 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建议定义了一个例外,和一些常量,允许应用程序以确定什么样的错误发生。携带一个实例提供适当的值的属性为特定的例外。
Python DOM接口提供了常数,也扩展了组异常这样一个特定的异常存在的异常代码定义的DOM。实现必须提高适当的具体的例外,每一个都有适当的值属性。
- 异常
-
基地异常类用于所有特定的DOM例外。这个异常类不能直接实例化。
xml.dom.
DOMException
- 异常
-
长大当一个指定范围的文本不符合一个字符串。这不是在Python中使用DOM实现,但不可能收到DOM实现用Python编写的。
xml.dom.
DomstringSizeErr
- 异常
-
提出当试图插入一个节点,节点类型是不允许的。
xml.dom.
HierarchyRequestErr
- 异常
-
提出当索引或尺寸参数方法是-或超过允许的值。
xml.dom.
IndexSizeErr
- 异常
-
当试图插入一个
Attr
节点已经存在其他文档。
xml.dom.
InuseAttributeErr
- 异常
-
提出了如果一个参数或操作不支持在底层对象。
xml.dom.
InvalidAccessErr
- 异常
-
这个异常是长大当一个字符串参数包含一个字符,是不允许在XML 1.0中使用的建议。例如,试图创建一个
Element
节点类型名称空间的元素将导致这个错误。
xml.dom.
InvalidCharacterErr
- 异常
-
提出当试图修改一个节点的类型。
xml.dom.
InvalidModificationErr
- 异常
-
提出当试图使用一个对象,没有定义或不再可用。
xml.dom.
InvalidStateErr
- 异常
-
如果试图改变任何对象的方式是不允许的建议,这个异常。
xml.dom.
NamespaceErr
- 异常
-
不存在例外,当一个节点引用的上下文。例如,
NamedNodeMap.removeNamedItem()
会提高如果节点通过在地图上并不存在。
xml.dom.
NotFoundErr
- 异常
-
提出实现时不支持请求的类型的对象或操作。
xml.dom.
NotSupportedErr
- 异常
-
这是提高如果指定数据的节点不支持数据。
xml.dom.
NoDataAllowedErr
- 异常
-
在试图修改一个对象,不允许修改(比如对于只读节点)。
xml.dom.
NoModificationAllowedErr
- 异常
-
长大当一个无效或非法指定字符串。
xml.dom.
SyntaxErr
- 异常
-
长大当一个节点插入比目前属于一个不同的文档,和实现不支持迁移的节点从一个文档移到另一个。
xml.dom.
WrongDocumentErr
异常代码中定义的映射到DOM建议上述例外情况根据这个表:
常数 | 异常 |
---|---|
DOMSTRING_SIZE_ERR | |
HIERARCHY_REQUEST_ERR | |
INDEX_SIZE_ERR | |
INUSE_ATTRIBUTE_ERR | |
INVALID_ACCESS_ERR | |
INVALID_CHARACTER_ERR | |
INVALID_MODIFICATION_ERR | |
INVALID_STATE_ERR | |
NAMESPACE_ERR | |
NOT_FOUND_ERR | |
NOT_SUPPORTED_ERR | |
NO_DATA_ALLOWED_ERR | |
NO_MODIFICATION_ALLOWED_ERR | |
SYNTAX_ERR | |
WRONG_DOCUMENT_ERR |
一致性
本节描述的一致性要求和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
不需要工作,可以提高一个吗.
然而,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
评论的对象
Comment
代表一个评论在XML文档。它的一个子类Node
,但不能有子节点。Comment.
data
评论的内容为字符串。领导之间的属性包含所有字符
<!-
-
和落后-
->
,但不包括他们。