17db96d56Sopenharmony_ci:mod:`xml.dom` --- The Document Object Model API 27db96d56Sopenharmony_ci================================================ 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: xml.dom 57db96d56Sopenharmony_ci :synopsis: Document Object Model API for Python. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. sectionauthor:: Paul Prescod <paul@prescod.net> 87db96d56Sopenharmony_ci.. sectionauthor:: Martin v. Löwis <martin@v.loewis.de> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/xml/dom/__init__.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciThe Document Object Model, or "DOM," is a cross-language API from the World Wide 157db96d56Sopenharmony_ciWeb Consortium (W3C) for accessing and modifying XML documents. A DOM 167db96d56Sopenharmony_ciimplementation presents an XML document as a tree structure, or allows client 177db96d56Sopenharmony_cicode to build such a structure from scratch. It then gives access to the 187db96d56Sopenharmony_cistructure through a set of objects which provided well-known interfaces. 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ciThe DOM is extremely useful for random-access applications. SAX only allows you 217db96d56Sopenharmony_cia view of one bit of the document at a time. If you are looking at one SAX 227db96d56Sopenharmony_cielement, you have no access to another. If you are looking at a text node, you 237db96d56Sopenharmony_cihave no access to a containing element. When you write a SAX application, you 247db96d56Sopenharmony_cineed to keep track of your program's position in the document somewhere in your 257db96d56Sopenharmony_ciown code. SAX does not do it for you. Also, if you need to look ahead in the 267db96d56Sopenharmony_ciXML document, you are just out of luck. 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ciSome applications are simply impossible in an event driven model with no access 297db96d56Sopenharmony_cito a tree. Of course you could build some sort of tree yourself in SAX events, 307db96d56Sopenharmony_cibut the DOM allows you to avoid writing that code. The DOM is a standard tree 317db96d56Sopenharmony_cirepresentation for XML data. 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ciThe Document Object Model is being defined by the W3C in stages, or "levels" in 347db96d56Sopenharmony_citheir terminology. The Python mapping of the API is substantially based on the 357db96d56Sopenharmony_ciDOM Level 2 recommendation. 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci.. What if your needs are somewhere between SAX and the DOM? Perhaps 387db96d56Sopenharmony_ci you cannot afford to load the entire tree in memory but you find the 397db96d56Sopenharmony_ci SAX model somewhat cumbersome and low-level. There is also a module 407db96d56Sopenharmony_ci called xml.dom.pulldom that allows you to build trees of only the 417db96d56Sopenharmony_ci parts of a document that you need structured access to. It also has 427db96d56Sopenharmony_ci features that allow you to find your way around the DOM. 437db96d56Sopenharmony_ci See http://www.prescod.net/python/pulldom 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ciDOM applications typically start by parsing some XML into a DOM. How this is 467db96d56Sopenharmony_ciaccomplished is not covered at all by DOM Level 1, and Level 2 provides only 477db96d56Sopenharmony_cilimited improvements: There is a :class:`DOMImplementation` object class which 487db96d56Sopenharmony_ciprovides access to :class:`Document` creation methods, but no way to access an 497db96d56Sopenharmony_ciXML reader/parser/Document builder in an implementation-independent way. There 507db96d56Sopenharmony_ciis also no well-defined way to access these methods without an existing 517db96d56Sopenharmony_ci:class:`Document` object. In Python, each DOM implementation will provide a 527db96d56Sopenharmony_cifunction :func:`getDOMImplementation`. DOM Level 3 adds a Load/Store 537db96d56Sopenharmony_cispecification, which defines an interface to the reader, but this is not yet 547db96d56Sopenharmony_ciavailable in the Python standard library. 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ciOnce you have a DOM document object, you can access the parts of your XML 577db96d56Sopenharmony_cidocument through its properties and methods. These properties are defined in 587db96d56Sopenharmony_cithe DOM specification; this portion of the reference manual describes the 597db96d56Sopenharmony_ciinterpretation of the specification in Python. 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ciThe specification provided by the W3C defines the DOM API for Java, ECMAScript, 627db96d56Sopenharmony_ciand OMG IDL. The Python mapping defined here is based in large part on the IDL 637db96d56Sopenharmony_civersion of the specification, but strict compliance is not required (though 647db96d56Sopenharmony_ciimplementations are free to support the strict mapping from IDL). See section 657db96d56Sopenharmony_ci:ref:`dom-conformance` for a detailed discussion of mapping requirements. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci.. seealso:: 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci `Document Object Model (DOM) Level 2 Specification <https://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/>`_ 717db96d56Sopenharmony_ci The W3C recommendation upon which the Python DOM API is based. 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci `Document Object Model (DOM) Level 1 Specification <https://www.w3.org/TR/REC-DOM-Level-1/>`_ 747db96d56Sopenharmony_ci The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci `Python Language Mapping Specification <https://www.omg.org/spec/PYTH/1.2/PDF>`_ 777db96d56Sopenharmony_ci This specifies the mapping from OMG IDL to Python. 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ciModule Contents 817db96d56Sopenharmony_ci--------------- 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ciThe :mod:`xml.dom` contains the following functions: 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci.. function:: registerDOMImplementation(name, factory) 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci Register the *factory* function with the name *name*. The factory function 897db96d56Sopenharmony_ci should return an object which implements the :class:`DOMImplementation` 907db96d56Sopenharmony_ci interface. The factory function can return the same object every time, or a new 917db96d56Sopenharmony_ci one for each call, as appropriate for the specific implementation (e.g. if that 927db96d56Sopenharmony_ci implementation supports some customization). 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci.. function:: getDOMImplementation(name=None, features=()) 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci Return a suitable DOM implementation. The *name* is either well-known, the 987db96d56Sopenharmony_ci module name of a DOM implementation, or ``None``. If it is not ``None``, imports 997db96d56Sopenharmony_ci the corresponding module and returns a :class:`DOMImplementation` object if the 1007db96d56Sopenharmony_ci import succeeds. If no name is given, and if the environment variable 1017db96d56Sopenharmony_ci :envvar:`PYTHON_DOM` is set, this variable is used to find the implementation. 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci If name is not given, this examines the available implementations to find one 1047db96d56Sopenharmony_ci with the required feature set. If no implementation can be found, raise an 1057db96d56Sopenharmony_ci :exc:`ImportError`. The features list must be a sequence of ``(feature, 1067db96d56Sopenharmony_ci version)`` pairs which are passed to the :meth:`hasFeature` method on available 1077db96d56Sopenharmony_ci :class:`DOMImplementation` objects. 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ciSome convenience constants are also provided: 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci.. data:: EMPTY_NAMESPACE 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci The value used to indicate that no namespace is associated with a node in the 1157db96d56Sopenharmony_ci DOM. This is typically found as the :attr:`namespaceURI` of a node, or used as 1167db96d56Sopenharmony_ci the *namespaceURI* parameter to a namespaces-specific method. 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci.. data:: XML_NAMESPACE 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci The namespace URI associated with the reserved prefix ``xml``, as defined by 1227db96d56Sopenharmony_ci `Namespaces in XML <https://www.w3.org/TR/REC-xml-names/>`_ (section 4). 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci.. data:: XMLNS_NAMESPACE 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci The namespace URI for namespace declarations, as defined by `Document Object 1287db96d56Sopenharmony_ci Model (DOM) Level 2 Core Specification 1297db96d56Sopenharmony_ci <https://www.w3.org/TR/DOM-Level-2-Core/core.html>`_ (section 1.1.8). 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci.. data:: XHTML_NAMESPACE 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci The URI of the XHTML namespace as defined by `XHTML 1.0: The Extensible 1357db96d56Sopenharmony_ci HyperText Markup Language <https://www.w3.org/TR/xhtml1/>`_ (section 3.1.1). 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ciIn addition, :mod:`xml.dom` contains a base :class:`Node` class and the DOM 1397db96d56Sopenharmony_ciexception classes. The :class:`Node` class provided by this module does not 1407db96d56Sopenharmony_ciimplement any of the methods or attributes defined by the DOM specification; 1417db96d56Sopenharmony_ciconcrete DOM implementations must provide those. The :class:`Node` class 1427db96d56Sopenharmony_ciprovided as part of this module does provide the constants used for the 1437db96d56Sopenharmony_ci:attr:`nodeType` attribute on concrete :class:`Node` objects; they are located 1447db96d56Sopenharmony_ciwithin the class rather than at the module level to conform with the DOM 1457db96d56Sopenharmony_cispecifications. 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci.. Should the Node documentation go here? 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci.. _dom-objects: 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ciObjects in the DOM 1537db96d56Sopenharmony_ci------------------ 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ciThe definitive documentation for the DOM is the DOM specification from the W3C. 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ciNote that DOM attributes may also be manipulated as nodes instead of as simple 1587db96d56Sopenharmony_cistrings. It is fairly rare that you must do this, however, so this usage is not 1597db96d56Sopenharmony_ciyet documented. 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1627db96d56Sopenharmony_ci| Interface | Section | Purpose | 1637db96d56Sopenharmony_ci+================================+===================================+=================================+ 1647db96d56Sopenharmony_ci| :class:`DOMImplementation` | :ref:`dom-implementation-objects` | Interface to the underlying | 1657db96d56Sopenharmony_ci| | | implementation. | 1667db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1677db96d56Sopenharmony_ci| :class:`Node` | :ref:`dom-node-objects` | Base interface for most objects | 1687db96d56Sopenharmony_ci| | | in a document. | 1697db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1707db96d56Sopenharmony_ci| :class:`NodeList` | :ref:`dom-nodelist-objects` | Interface for a sequence of | 1717db96d56Sopenharmony_ci| | | nodes. | 1727db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1737db96d56Sopenharmony_ci| :class:`DocumentType` | :ref:`dom-documenttype-objects` | Information about the | 1747db96d56Sopenharmony_ci| | | declarations needed to process | 1757db96d56Sopenharmony_ci| | | a document. | 1767db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1777db96d56Sopenharmony_ci| :class:`Document` | :ref:`dom-document-objects` | Object which represents an | 1787db96d56Sopenharmony_ci| | | entire document. | 1797db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1807db96d56Sopenharmony_ci| :class:`Element` | :ref:`dom-element-objects` | Element nodes in the document | 1817db96d56Sopenharmony_ci| | | hierarchy. | 1827db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1837db96d56Sopenharmony_ci| :class:`Attr` | :ref:`dom-attr-objects` | Attribute value nodes on | 1847db96d56Sopenharmony_ci| | | element nodes. | 1857db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1867db96d56Sopenharmony_ci| :class:`Comment` | :ref:`dom-comment-objects` | Representation of comments in | 1877db96d56Sopenharmony_ci| | | the source document. | 1887db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1897db96d56Sopenharmony_ci| :class:`Text` | :ref:`dom-text-objects` | Nodes containing textual | 1907db96d56Sopenharmony_ci| | | content from the document. | 1917db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1927db96d56Sopenharmony_ci| :class:`ProcessingInstruction` | :ref:`dom-pi-objects` | Processing instruction | 1937db96d56Sopenharmony_ci| | | representation. | 1947db96d56Sopenharmony_ci+--------------------------------+-----------------------------------+---------------------------------+ 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ciAn additional section describes the exceptions defined for working with the DOM 1977db96d56Sopenharmony_ciin Python. 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci.. _dom-implementation-objects: 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ciDOMImplementation Objects 2037db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^ 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ciThe :class:`DOMImplementation` interface provides a way for applications to 2067db96d56Sopenharmony_cidetermine the availability of particular features in the DOM they are using. 2077db96d56Sopenharmony_ciDOM Level 2 added the ability to create new :class:`Document` and 2087db96d56Sopenharmony_ci:class:`DocumentType` objects using the :class:`DOMImplementation` as well. 2097db96d56Sopenharmony_ci 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci.. method:: DOMImplementation.hasFeature(feature, version) 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ci Return ``True`` if the feature identified by the pair of strings *feature* and 2147db96d56Sopenharmony_ci *version* is implemented. 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci.. method:: DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype) 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci Return a new :class:`Document` object (the root of the DOM), with a child 2207db96d56Sopenharmony_ci :class:`Element` object having the given *namespaceUri* and *qualifiedName*. The 2217db96d56Sopenharmony_ci *doctype* must be a :class:`DocumentType` object created by 2227db96d56Sopenharmony_ci :meth:`createDocumentType`, or ``None``. In the Python DOM API, the first two 2237db96d56Sopenharmony_ci arguments can also be ``None`` in order to indicate that no :class:`Element` 2247db96d56Sopenharmony_ci child is to be created. 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci 2277db96d56Sopenharmony_ci.. method:: DOMImplementation.createDocumentType(qualifiedName, publicId, systemId) 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci Return a new :class:`DocumentType` object that encapsulates the given 2307db96d56Sopenharmony_ci *qualifiedName*, *publicId*, and *systemId* strings, representing the 2317db96d56Sopenharmony_ci information contained in an XML document type declaration. 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ci.. _dom-node-objects: 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ciNode Objects 2377db96d56Sopenharmony_ci^^^^^^^^^^^^ 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ciAll of the components of an XML document are subclasses of :class:`Node`. 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ci.. attribute:: Node.nodeType 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci An integer representing the node type. Symbolic constants for the types are on 2457db96d56Sopenharmony_ci the :class:`Node` object: :const:`ELEMENT_NODE`, :const:`ATTRIBUTE_NODE`, 2467db96d56Sopenharmony_ci :const:`TEXT_NODE`, :const:`CDATA_SECTION_NODE`, :const:`ENTITY_NODE`, 2477db96d56Sopenharmony_ci :const:`PROCESSING_INSTRUCTION_NODE`, :const:`COMMENT_NODE`, 2487db96d56Sopenharmony_ci :const:`DOCUMENT_NODE`, :const:`DOCUMENT_TYPE_NODE`, :const:`NOTATION_NODE`. 2497db96d56Sopenharmony_ci This is a read-only attribute. 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci.. attribute:: Node.parentNode 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci The parent of the current node, or ``None`` for the document node. The value is 2557db96d56Sopenharmony_ci always a :class:`Node` object or ``None``. For :class:`Element` nodes, this 2567db96d56Sopenharmony_ci will be the parent element, except for the root element, in which case it will 2577db96d56Sopenharmony_ci be the :class:`Document` object. For :class:`Attr` nodes, this is always 2587db96d56Sopenharmony_ci ``None``. This is a read-only attribute. 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci 2617db96d56Sopenharmony_ci.. attribute:: Node.attributes 2627db96d56Sopenharmony_ci 2637db96d56Sopenharmony_ci A :class:`NamedNodeMap` of attribute objects. Only elements have actual values 2647db96d56Sopenharmony_ci for this; others provide ``None`` for this attribute. This is a read-only 2657db96d56Sopenharmony_ci attribute. 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci.. attribute:: Node.previousSibling 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci The node that immediately precedes this one with the same parent. For 2717db96d56Sopenharmony_ci instance the element with an end-tag that comes just before the *self* 2727db96d56Sopenharmony_ci element's start-tag. Of course, XML documents are made up of more than just 2737db96d56Sopenharmony_ci elements so the previous sibling could be text, a comment, or something else. 2747db96d56Sopenharmony_ci If this node is the first child of the parent, this attribute will be 2757db96d56Sopenharmony_ci ``None``. This is a read-only attribute. 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ci.. attribute:: Node.nextSibling 2797db96d56Sopenharmony_ci 2807db96d56Sopenharmony_ci The node that immediately follows this one with the same parent. See also 2817db96d56Sopenharmony_ci :attr:`previousSibling`. If this is the last child of the parent, this 2827db96d56Sopenharmony_ci attribute will be ``None``. This is a read-only attribute. 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ci.. attribute:: Node.childNodes 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci A list of nodes contained within this node. This is a read-only attribute. 2887db96d56Sopenharmony_ci 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci.. attribute:: Node.firstChild 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ci The first child of the node, if there are any, or ``None``. This is a read-only 2937db96d56Sopenharmony_ci attribute. 2947db96d56Sopenharmony_ci 2957db96d56Sopenharmony_ci 2967db96d56Sopenharmony_ci.. attribute:: Node.lastChild 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci The last child of the node, if there are any, or ``None``. This is a read-only 2997db96d56Sopenharmony_ci attribute. 3007db96d56Sopenharmony_ci 3017db96d56Sopenharmony_ci 3027db96d56Sopenharmony_ci.. attribute:: Node.localName 3037db96d56Sopenharmony_ci 3047db96d56Sopenharmony_ci The part of the :attr:`tagName` following the colon if there is one, else the 3057db96d56Sopenharmony_ci entire :attr:`tagName`. The value is a string. 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci 3087db96d56Sopenharmony_ci.. attribute:: Node.prefix 3097db96d56Sopenharmony_ci 3107db96d56Sopenharmony_ci The part of the :attr:`tagName` preceding the colon if there is one, else the 3117db96d56Sopenharmony_ci empty string. The value is a string, or ``None``. 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci.. attribute:: Node.namespaceURI 3157db96d56Sopenharmony_ci 3167db96d56Sopenharmony_ci The namespace associated with the element name. This will be a string or 3177db96d56Sopenharmony_ci ``None``. This is a read-only attribute. 3187db96d56Sopenharmony_ci 3197db96d56Sopenharmony_ci 3207db96d56Sopenharmony_ci.. attribute:: Node.nodeName 3217db96d56Sopenharmony_ci 3227db96d56Sopenharmony_ci This has a different meaning for each node type; see the DOM specification for 3237db96d56Sopenharmony_ci details. You can always get the information you would get here from another 3247db96d56Sopenharmony_ci property such as the :attr:`tagName` property for elements or the :attr:`name` 3257db96d56Sopenharmony_ci property for attributes. For all node types, the value of this attribute will be 3267db96d56Sopenharmony_ci either a string or ``None``. This is a read-only attribute. 3277db96d56Sopenharmony_ci 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci.. attribute:: Node.nodeValue 3307db96d56Sopenharmony_ci 3317db96d56Sopenharmony_ci This has a different meaning for each node type; see the DOM specification for 3327db96d56Sopenharmony_ci details. The situation is similar to that with :attr:`nodeName`. The value is 3337db96d56Sopenharmony_ci a string or ``None``. 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci 3367db96d56Sopenharmony_ci.. method:: Node.hasAttributes() 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci Return ``True`` if the node has any attributes. 3397db96d56Sopenharmony_ci 3407db96d56Sopenharmony_ci 3417db96d56Sopenharmony_ci.. method:: Node.hasChildNodes() 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci Return ``True`` if the node has any child nodes. 3447db96d56Sopenharmony_ci 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci.. method:: Node.isSameNode(other) 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci Return ``True`` if *other* refers to the same node as this node. This is especially 3497db96d56Sopenharmony_ci useful for DOM implementations which use any sort of proxy architecture (because 3507db96d56Sopenharmony_ci more than one object can refer to the same node). 3517db96d56Sopenharmony_ci 3527db96d56Sopenharmony_ci .. note:: 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci This is based on a proposed DOM Level 3 API which is still in the "working 3557db96d56Sopenharmony_ci draft" stage, but this particular interface appears uncontroversial. Changes 3567db96d56Sopenharmony_ci from the W3C will not necessarily affect this method in the Python DOM interface 3577db96d56Sopenharmony_ci (though any new W3C API for this would also be supported). 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci.. method:: Node.appendChild(newChild) 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci Add a new child node to this node at the end of the list of 3637db96d56Sopenharmony_ci children, returning *newChild*. If the node was already in 3647db96d56Sopenharmony_ci the tree, it is removed first. 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_ci.. method:: Node.insertBefore(newChild, refChild) 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci Insert a new child node before an existing child. It must be the case that 3707db96d56Sopenharmony_ci *refChild* is a child of this node; if not, :exc:`ValueError` is raised. 3717db96d56Sopenharmony_ci *newChild* is returned. If *refChild* is ``None``, it inserts *newChild* at the 3727db96d56Sopenharmony_ci end of the children's list. 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci 3757db96d56Sopenharmony_ci.. method:: Node.removeChild(oldChild) 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ci Remove a child node. *oldChild* must be a child of this node; if not, 3787db96d56Sopenharmony_ci :exc:`ValueError` is raised. *oldChild* is returned on success. If *oldChild* 3797db96d56Sopenharmony_ci will not be used further, its :meth:`unlink` method should be called. 3807db96d56Sopenharmony_ci 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci.. method:: Node.replaceChild(newChild, oldChild) 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ci Replace an existing node with a new node. It must be the case that *oldChild* 3857db96d56Sopenharmony_ci is a child of this node; if not, :exc:`ValueError` is raised. 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci 3887db96d56Sopenharmony_ci.. method:: Node.normalize() 3897db96d56Sopenharmony_ci 3907db96d56Sopenharmony_ci Join adjacent text nodes so that all stretches of text are stored as single 3917db96d56Sopenharmony_ci :class:`Text` instances. This simplifies processing text from a DOM tree for 3927db96d56Sopenharmony_ci many applications. 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci 3957db96d56Sopenharmony_ci.. method:: Node.cloneNode(deep) 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ci Clone this node. Setting *deep* means to clone all child nodes as well. This 3987db96d56Sopenharmony_ci returns the clone. 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci.. _dom-nodelist-objects: 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ciNodeList Objects 4047db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^ 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ciA :class:`NodeList` represents a sequence of nodes. These objects are used in 4077db96d56Sopenharmony_citwo ways in the DOM Core recommendation: an :class:`Element` object provides 4087db96d56Sopenharmony_cione as its list of child nodes, and the :meth:`getElementsByTagName` and 4097db96d56Sopenharmony_ci:meth:`getElementsByTagNameNS` methods of :class:`Node` return objects with this 4107db96d56Sopenharmony_ciinterface to represent query results. 4117db96d56Sopenharmony_ci 4127db96d56Sopenharmony_ciThe DOM Level 2 recommendation defines one method and one attribute for these 4137db96d56Sopenharmony_ciobjects: 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ci.. method:: NodeList.item(i) 4177db96d56Sopenharmony_ci 4187db96d56Sopenharmony_ci Return the *i*'th item from the sequence, if there is one, or ``None``. The 4197db96d56Sopenharmony_ci index *i* is not allowed to be less than zero or greater than or equal to the 4207db96d56Sopenharmony_ci length of the sequence. 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci.. attribute:: NodeList.length 4247db96d56Sopenharmony_ci 4257db96d56Sopenharmony_ci The number of nodes in the sequence. 4267db96d56Sopenharmony_ci 4277db96d56Sopenharmony_ciIn addition, the Python DOM interface requires that some additional support is 4287db96d56Sopenharmony_ciprovided to allow :class:`NodeList` objects to be used as Python sequences. All 4297db96d56Sopenharmony_ci:class:`NodeList` implementations must include support for 4307db96d56Sopenharmony_ci:meth:`~object.__len__` and 4317db96d56Sopenharmony_ci:meth:`~object.__getitem__`; this allows iteration over the :class:`NodeList` in 4327db96d56Sopenharmony_ci:keyword:`for` statements and proper support for the :func:`len` built-in 4337db96d56Sopenharmony_cifunction. 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ciIf a DOM implementation supports modification of the document, the 4367db96d56Sopenharmony_ci:class:`NodeList` implementation must also support the 4377db96d56Sopenharmony_ci:meth:`~object.__setitem__` and :meth:`~object.__delitem__` methods. 4387db96d56Sopenharmony_ci 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_ci.. _dom-documenttype-objects: 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ciDocumentType Objects 4437db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^ 4447db96d56Sopenharmony_ci 4457db96d56Sopenharmony_ciInformation about the notations and entities declared by a document (including 4467db96d56Sopenharmony_cithe external subset if the parser uses it and can provide the information) is 4477db96d56Sopenharmony_ciavailable from a :class:`DocumentType` object. The :class:`DocumentType` for a 4487db96d56Sopenharmony_cidocument is available from the :class:`Document` object's :attr:`doctype` 4497db96d56Sopenharmony_ciattribute; if there is no ``DOCTYPE`` declaration for the document, the 4507db96d56Sopenharmony_cidocument's :attr:`doctype` attribute will be set to ``None`` instead of an 4517db96d56Sopenharmony_ciinstance of this interface. 4527db96d56Sopenharmony_ci 4537db96d56Sopenharmony_ci:class:`DocumentType` is a specialization of :class:`Node`, and adds the 4547db96d56Sopenharmony_cifollowing attributes: 4557db96d56Sopenharmony_ci 4567db96d56Sopenharmony_ci 4577db96d56Sopenharmony_ci.. attribute:: DocumentType.publicId 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci The public identifier for the external subset of the document type definition. 4607db96d56Sopenharmony_ci This will be a string or ``None``. 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci 4637db96d56Sopenharmony_ci.. attribute:: DocumentType.systemId 4647db96d56Sopenharmony_ci 4657db96d56Sopenharmony_ci The system identifier for the external subset of the document type definition. 4667db96d56Sopenharmony_ci This will be a URI as a string, or ``None``. 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_ci 4697db96d56Sopenharmony_ci.. attribute:: DocumentType.internalSubset 4707db96d56Sopenharmony_ci 4717db96d56Sopenharmony_ci A string giving the complete internal subset from the document. This does not 4727db96d56Sopenharmony_ci include the brackets which enclose the subset. If the document has no internal 4737db96d56Sopenharmony_ci subset, this should be ``None``. 4747db96d56Sopenharmony_ci 4757db96d56Sopenharmony_ci 4767db96d56Sopenharmony_ci.. attribute:: DocumentType.name 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci The name of the root element as given in the ``DOCTYPE`` declaration, if 4797db96d56Sopenharmony_ci present. 4807db96d56Sopenharmony_ci 4817db96d56Sopenharmony_ci 4827db96d56Sopenharmony_ci.. attribute:: DocumentType.entities 4837db96d56Sopenharmony_ci 4847db96d56Sopenharmony_ci This is a :class:`NamedNodeMap` giving the definitions of external entities. 4857db96d56Sopenharmony_ci For entity names defined more than once, only the first definition is provided 4867db96d56Sopenharmony_ci (others are ignored as required by the XML recommendation). This may be 4877db96d56Sopenharmony_ci ``None`` if the information is not provided by the parser, or if no entities are 4887db96d56Sopenharmony_ci defined. 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ci 4917db96d56Sopenharmony_ci.. attribute:: DocumentType.notations 4927db96d56Sopenharmony_ci 4937db96d56Sopenharmony_ci This is a :class:`NamedNodeMap` giving the definitions of notations. For 4947db96d56Sopenharmony_ci notation names defined more than once, only the first definition is provided 4957db96d56Sopenharmony_ci (others are ignored as required by the XML recommendation). This may be 4967db96d56Sopenharmony_ci ``None`` if the information is not provided by the parser, or if no notations 4977db96d56Sopenharmony_ci are defined. 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_ci 5007db96d56Sopenharmony_ci.. _dom-document-objects: 5017db96d56Sopenharmony_ci 5027db96d56Sopenharmony_ciDocument Objects 5037db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^ 5047db96d56Sopenharmony_ci 5057db96d56Sopenharmony_ciA :class:`Document` represents an entire XML document, including its constituent 5067db96d56Sopenharmony_cielements, attributes, processing instructions, comments etc. Remember that it 5077db96d56Sopenharmony_ciinherits properties from :class:`Node`. 5087db96d56Sopenharmony_ci 5097db96d56Sopenharmony_ci 5107db96d56Sopenharmony_ci.. attribute:: Document.documentElement 5117db96d56Sopenharmony_ci 5127db96d56Sopenharmony_ci The one and only root element of the document. 5137db96d56Sopenharmony_ci 5147db96d56Sopenharmony_ci 5157db96d56Sopenharmony_ci.. method:: Document.createElement(tagName) 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ci Create and return a new element node. The element is not inserted into the 5187db96d56Sopenharmony_ci document when it is created. You need to explicitly insert it with one of the 5197db96d56Sopenharmony_ci other methods such as :meth:`insertBefore` or :meth:`appendChild`. 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci 5227db96d56Sopenharmony_ci.. method:: Document.createElementNS(namespaceURI, tagName) 5237db96d56Sopenharmony_ci 5247db96d56Sopenharmony_ci Create and return a new element with a namespace. The *tagName* may have a 5257db96d56Sopenharmony_ci prefix. The element is not inserted into the document when it is created. You 5267db96d56Sopenharmony_ci need to explicitly insert it with one of the other methods such as 5277db96d56Sopenharmony_ci :meth:`insertBefore` or :meth:`appendChild`. 5287db96d56Sopenharmony_ci 5297db96d56Sopenharmony_ci 5307db96d56Sopenharmony_ci.. method:: Document.createTextNode(data) 5317db96d56Sopenharmony_ci 5327db96d56Sopenharmony_ci Create and return a text node containing the data passed as a parameter. As 5337db96d56Sopenharmony_ci with the other creation methods, this one does not insert the node into the 5347db96d56Sopenharmony_ci tree. 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci 5377db96d56Sopenharmony_ci.. method:: Document.createComment(data) 5387db96d56Sopenharmony_ci 5397db96d56Sopenharmony_ci Create and return a comment node containing the data passed as a parameter. As 5407db96d56Sopenharmony_ci with the other creation methods, this one does not insert the node into the 5417db96d56Sopenharmony_ci tree. 5427db96d56Sopenharmony_ci 5437db96d56Sopenharmony_ci 5447db96d56Sopenharmony_ci.. method:: Document.createProcessingInstruction(target, data) 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci Create and return a processing instruction node containing the *target* and 5477db96d56Sopenharmony_ci *data* passed as parameters. As with the other creation methods, this one does 5487db96d56Sopenharmony_ci not insert the node into the tree. 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ci 5517db96d56Sopenharmony_ci.. method:: Document.createAttribute(name) 5527db96d56Sopenharmony_ci 5537db96d56Sopenharmony_ci Create and return an attribute node. This method does not associate the 5547db96d56Sopenharmony_ci attribute node with any particular element. You must use 5557db96d56Sopenharmony_ci :meth:`setAttributeNode` on the appropriate :class:`Element` object to use the 5567db96d56Sopenharmony_ci newly created attribute instance. 5577db96d56Sopenharmony_ci 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ci.. method:: Document.createAttributeNS(namespaceURI, qualifiedName) 5607db96d56Sopenharmony_ci 5617db96d56Sopenharmony_ci Create and return an attribute node with a namespace. The *tagName* may have a 5627db96d56Sopenharmony_ci prefix. This method does not associate the attribute node with any particular 5637db96d56Sopenharmony_ci element. You must use :meth:`setAttributeNode` on the appropriate 5647db96d56Sopenharmony_ci :class:`Element` object to use the newly created attribute instance. 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_ci 5677db96d56Sopenharmony_ci.. method:: Document.getElementsByTagName(tagName) 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci Search for all descendants (direct children, children's children, etc.) with a 5707db96d56Sopenharmony_ci particular element type name. 5717db96d56Sopenharmony_ci 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci.. method:: Document.getElementsByTagNameNS(namespaceURI, localName) 5747db96d56Sopenharmony_ci 5757db96d56Sopenharmony_ci Search for all descendants (direct children, children's children, etc.) with a 5767db96d56Sopenharmony_ci particular namespace URI and localname. The localname is the part of the 5777db96d56Sopenharmony_ci namespace after the prefix. 5787db96d56Sopenharmony_ci 5797db96d56Sopenharmony_ci 5807db96d56Sopenharmony_ci.. _dom-element-objects: 5817db96d56Sopenharmony_ci 5827db96d56Sopenharmony_ciElement Objects 5837db96d56Sopenharmony_ci^^^^^^^^^^^^^^^ 5847db96d56Sopenharmony_ci 5857db96d56Sopenharmony_ci:class:`Element` is a subclass of :class:`Node`, so inherits all the attributes 5867db96d56Sopenharmony_ciof that class. 5877db96d56Sopenharmony_ci 5887db96d56Sopenharmony_ci 5897db96d56Sopenharmony_ci.. attribute:: Element.tagName 5907db96d56Sopenharmony_ci 5917db96d56Sopenharmony_ci The element type name. In a namespace-using document it may have colons in it. 5927db96d56Sopenharmony_ci The value is a string. 5937db96d56Sopenharmony_ci 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci.. method:: Element.getElementsByTagName(tagName) 5967db96d56Sopenharmony_ci 5977db96d56Sopenharmony_ci Same as equivalent method in the :class:`Document` class. 5987db96d56Sopenharmony_ci 5997db96d56Sopenharmony_ci 6007db96d56Sopenharmony_ci.. method:: Element.getElementsByTagNameNS(namespaceURI, localName) 6017db96d56Sopenharmony_ci 6027db96d56Sopenharmony_ci Same as equivalent method in the :class:`Document` class. 6037db96d56Sopenharmony_ci 6047db96d56Sopenharmony_ci 6057db96d56Sopenharmony_ci.. method:: Element.hasAttribute(name) 6067db96d56Sopenharmony_ci 6077db96d56Sopenharmony_ci Return ``True`` if the element has an attribute named by *name*. 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci 6107db96d56Sopenharmony_ci.. method:: Element.hasAttributeNS(namespaceURI, localName) 6117db96d56Sopenharmony_ci 6127db96d56Sopenharmony_ci Return ``True`` if the element has an attribute named by *namespaceURI* and 6137db96d56Sopenharmony_ci *localName*. 6147db96d56Sopenharmony_ci 6157db96d56Sopenharmony_ci 6167db96d56Sopenharmony_ci.. method:: Element.getAttribute(name) 6177db96d56Sopenharmony_ci 6187db96d56Sopenharmony_ci Return the value of the attribute named by *name* as a string. If no such 6197db96d56Sopenharmony_ci attribute exists, an empty string is returned, as if the attribute had no value. 6207db96d56Sopenharmony_ci 6217db96d56Sopenharmony_ci 6227db96d56Sopenharmony_ci.. method:: Element.getAttributeNode(attrname) 6237db96d56Sopenharmony_ci 6247db96d56Sopenharmony_ci Return the :class:`Attr` node for the attribute named by *attrname*. 6257db96d56Sopenharmony_ci 6267db96d56Sopenharmony_ci 6277db96d56Sopenharmony_ci.. method:: Element.getAttributeNS(namespaceURI, localName) 6287db96d56Sopenharmony_ci 6297db96d56Sopenharmony_ci Return the value of the attribute named by *namespaceURI* and *localName* as a 6307db96d56Sopenharmony_ci string. If no such attribute exists, an empty string is returned, as if the 6317db96d56Sopenharmony_ci attribute had no value. 6327db96d56Sopenharmony_ci 6337db96d56Sopenharmony_ci 6347db96d56Sopenharmony_ci.. method:: Element.getAttributeNodeNS(namespaceURI, localName) 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ci Return an attribute value as a node, given a *namespaceURI* and *localName*. 6377db96d56Sopenharmony_ci 6387db96d56Sopenharmony_ci 6397db96d56Sopenharmony_ci.. method:: Element.removeAttribute(name) 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci Remove an attribute by name. If there is no matching attribute, a 6427db96d56Sopenharmony_ci :exc:`NotFoundErr` is raised. 6437db96d56Sopenharmony_ci 6447db96d56Sopenharmony_ci 6457db96d56Sopenharmony_ci.. method:: Element.removeAttributeNode(oldAttr) 6467db96d56Sopenharmony_ci 6477db96d56Sopenharmony_ci Remove and return *oldAttr* from the attribute list, if present. If *oldAttr* is 6487db96d56Sopenharmony_ci not present, :exc:`NotFoundErr` is raised. 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci.. method:: Element.removeAttributeNS(namespaceURI, localName) 6527db96d56Sopenharmony_ci 6537db96d56Sopenharmony_ci Remove an attribute by name. Note that it uses a localName, not a qname. No 6547db96d56Sopenharmony_ci exception is raised if there is no matching attribute. 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci 6577db96d56Sopenharmony_ci.. method:: Element.setAttribute(name, value) 6587db96d56Sopenharmony_ci 6597db96d56Sopenharmony_ci Set an attribute value from a string. 6607db96d56Sopenharmony_ci 6617db96d56Sopenharmony_ci 6627db96d56Sopenharmony_ci.. method:: Element.setAttributeNode(newAttr) 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_ci Add a new attribute node to the element, replacing an existing attribute if 6657db96d56Sopenharmony_ci necessary if the :attr:`name` attribute matches. If a replacement occurs, the 6667db96d56Sopenharmony_ci old attribute node will be returned. If *newAttr* is already in use, 6677db96d56Sopenharmony_ci :exc:`InuseAttributeErr` will be raised. 6687db96d56Sopenharmony_ci 6697db96d56Sopenharmony_ci 6707db96d56Sopenharmony_ci.. method:: Element.setAttributeNodeNS(newAttr) 6717db96d56Sopenharmony_ci 6727db96d56Sopenharmony_ci Add a new attribute node to the element, replacing an existing attribute if 6737db96d56Sopenharmony_ci necessary if the :attr:`namespaceURI` and :attr:`localName` attributes match. 6747db96d56Sopenharmony_ci If a replacement occurs, the old attribute node will be returned. If *newAttr* 6757db96d56Sopenharmony_ci is already in use, :exc:`InuseAttributeErr` will be raised. 6767db96d56Sopenharmony_ci 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci.. method:: Element.setAttributeNS(namespaceURI, qname, value) 6797db96d56Sopenharmony_ci 6807db96d56Sopenharmony_ci Set an attribute value from a string, given a *namespaceURI* and a *qname*. 6817db96d56Sopenharmony_ci Note that a qname is the whole attribute name. This is different than above. 6827db96d56Sopenharmony_ci 6837db96d56Sopenharmony_ci 6847db96d56Sopenharmony_ci.. _dom-attr-objects: 6857db96d56Sopenharmony_ci 6867db96d56Sopenharmony_ciAttr Objects 6877db96d56Sopenharmony_ci^^^^^^^^^^^^ 6887db96d56Sopenharmony_ci 6897db96d56Sopenharmony_ci:class:`Attr` inherits from :class:`Node`, so inherits all its attributes. 6907db96d56Sopenharmony_ci 6917db96d56Sopenharmony_ci 6927db96d56Sopenharmony_ci.. attribute:: Attr.name 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ci The attribute name. 6957db96d56Sopenharmony_ci In a namespace-using document it may include a colon. 6967db96d56Sopenharmony_ci 6977db96d56Sopenharmony_ci 6987db96d56Sopenharmony_ci.. attribute:: Attr.localName 6997db96d56Sopenharmony_ci 7007db96d56Sopenharmony_ci The part of the name following the colon if there is one, else the 7017db96d56Sopenharmony_ci entire name. 7027db96d56Sopenharmony_ci This is a read-only attribute. 7037db96d56Sopenharmony_ci 7047db96d56Sopenharmony_ci 7057db96d56Sopenharmony_ci.. attribute:: Attr.prefix 7067db96d56Sopenharmony_ci 7077db96d56Sopenharmony_ci The part of the name preceding the colon if there is one, else the 7087db96d56Sopenharmony_ci empty string. 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ci 7117db96d56Sopenharmony_ci.. attribute:: Attr.value 7127db96d56Sopenharmony_ci 7137db96d56Sopenharmony_ci The text value of the attribute. This is a synonym for the 7147db96d56Sopenharmony_ci :attr:`nodeValue` attribute. 7157db96d56Sopenharmony_ci 7167db96d56Sopenharmony_ci 7177db96d56Sopenharmony_ci.. _dom-attributelist-objects: 7187db96d56Sopenharmony_ci 7197db96d56Sopenharmony_ciNamedNodeMap Objects 7207db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^ 7217db96d56Sopenharmony_ci 7227db96d56Sopenharmony_ci:class:`NamedNodeMap` does *not* inherit from :class:`Node`. 7237db96d56Sopenharmony_ci 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci.. attribute:: NamedNodeMap.length 7267db96d56Sopenharmony_ci 7277db96d56Sopenharmony_ci The length of the attribute list. 7287db96d56Sopenharmony_ci 7297db96d56Sopenharmony_ci 7307db96d56Sopenharmony_ci.. method:: NamedNodeMap.item(index) 7317db96d56Sopenharmony_ci 7327db96d56Sopenharmony_ci Return an attribute with a particular index. The order you get the attributes 7337db96d56Sopenharmony_ci in is arbitrary but will be consistent for the life of a DOM. Each item is an 7347db96d56Sopenharmony_ci attribute node. Get its value with the :attr:`value` attribute. 7357db96d56Sopenharmony_ci 7367db96d56Sopenharmony_ciThere are also experimental methods that give this class more mapping behavior. 7377db96d56Sopenharmony_ciYou can use them or you can use the standardized :meth:`getAttribute\*` family 7387db96d56Sopenharmony_ciof methods on the :class:`Element` objects. 7397db96d56Sopenharmony_ci 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ci.. _dom-comment-objects: 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ciComment Objects 7447db96d56Sopenharmony_ci^^^^^^^^^^^^^^^ 7457db96d56Sopenharmony_ci 7467db96d56Sopenharmony_ci:class:`Comment` represents a comment in the XML document. It is a subclass of 7477db96d56Sopenharmony_ci:class:`Node`, but cannot have child nodes. 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ci 7507db96d56Sopenharmony_ci.. attribute:: Comment.data 7517db96d56Sopenharmony_ci 7527db96d56Sopenharmony_ci The content of the comment as a string. The attribute contains all characters 7537db96d56Sopenharmony_ci between the leading ``<!-``\ ``-`` and trailing ``-``\ ``->``, but does not 7547db96d56Sopenharmony_ci include them. 7557db96d56Sopenharmony_ci 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci.. _dom-text-objects: 7587db96d56Sopenharmony_ci 7597db96d56Sopenharmony_ciText and CDATASection Objects 7607db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 7617db96d56Sopenharmony_ci 7627db96d56Sopenharmony_ciThe :class:`Text` interface represents text in the XML document. If the parser 7637db96d56Sopenharmony_ciand DOM implementation support the DOM's XML extension, portions of the text 7647db96d56Sopenharmony_cienclosed in CDATA marked sections are stored in :class:`CDATASection` objects. 7657db96d56Sopenharmony_ciThese two interfaces are identical, but provide different values for the 7667db96d56Sopenharmony_ci:attr:`nodeType` attribute. 7677db96d56Sopenharmony_ci 7687db96d56Sopenharmony_ciThese interfaces extend the :class:`Node` interface. They cannot have child 7697db96d56Sopenharmony_cinodes. 7707db96d56Sopenharmony_ci 7717db96d56Sopenharmony_ci 7727db96d56Sopenharmony_ci.. attribute:: Text.data 7737db96d56Sopenharmony_ci 7747db96d56Sopenharmony_ci The content of the text node as a string. 7757db96d56Sopenharmony_ci 7767db96d56Sopenharmony_ci.. note:: 7777db96d56Sopenharmony_ci 7787db96d56Sopenharmony_ci The use of a :class:`CDATASection` node does not indicate that the node 7797db96d56Sopenharmony_ci represents a complete CDATA marked section, only that the content of the node 7807db96d56Sopenharmony_ci was part of a CDATA section. A single CDATA section may be represented by more 7817db96d56Sopenharmony_ci than one node in the document tree. There is no way to determine whether two 7827db96d56Sopenharmony_ci adjacent :class:`CDATASection` nodes represent different CDATA marked sections. 7837db96d56Sopenharmony_ci 7847db96d56Sopenharmony_ci 7857db96d56Sopenharmony_ci.. _dom-pi-objects: 7867db96d56Sopenharmony_ci 7877db96d56Sopenharmony_ciProcessingInstruction Objects 7887db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 7897db96d56Sopenharmony_ci 7907db96d56Sopenharmony_ciRepresents a processing instruction in the XML document; this inherits from the 7917db96d56Sopenharmony_ci:class:`Node` interface and cannot have child nodes. 7927db96d56Sopenharmony_ci 7937db96d56Sopenharmony_ci 7947db96d56Sopenharmony_ci.. attribute:: ProcessingInstruction.target 7957db96d56Sopenharmony_ci 7967db96d56Sopenharmony_ci The content of the processing instruction up to the first whitespace character. 7977db96d56Sopenharmony_ci This is a read-only attribute. 7987db96d56Sopenharmony_ci 7997db96d56Sopenharmony_ci 8007db96d56Sopenharmony_ci.. attribute:: ProcessingInstruction.data 8017db96d56Sopenharmony_ci 8027db96d56Sopenharmony_ci The content of the processing instruction following the first whitespace 8037db96d56Sopenharmony_ci character. 8047db96d56Sopenharmony_ci 8057db96d56Sopenharmony_ci 8067db96d56Sopenharmony_ci.. _dom-exceptions: 8077db96d56Sopenharmony_ci 8087db96d56Sopenharmony_ciExceptions 8097db96d56Sopenharmony_ci^^^^^^^^^^ 8107db96d56Sopenharmony_ci 8117db96d56Sopenharmony_ciThe DOM Level 2 recommendation defines a single exception, :exc:`DOMException`, 8127db96d56Sopenharmony_ciand a number of constants that allow applications to determine what sort of 8137db96d56Sopenharmony_cierror occurred. :exc:`DOMException` instances carry a :attr:`code` attribute 8147db96d56Sopenharmony_cithat provides the appropriate value for the specific exception. 8157db96d56Sopenharmony_ci 8167db96d56Sopenharmony_ciThe Python DOM interface provides the constants, but also expands the set of 8177db96d56Sopenharmony_ciexceptions so that a specific exception exists for each of the exception codes 8187db96d56Sopenharmony_cidefined by the DOM. The implementations must raise the appropriate specific 8197db96d56Sopenharmony_ciexception, each of which carries the appropriate value for the :attr:`code` 8207db96d56Sopenharmony_ciattribute. 8217db96d56Sopenharmony_ci 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_ci.. exception:: DOMException 8247db96d56Sopenharmony_ci 8257db96d56Sopenharmony_ci Base exception class used for all specific DOM exceptions. This exception class 8267db96d56Sopenharmony_ci cannot be directly instantiated. 8277db96d56Sopenharmony_ci 8287db96d56Sopenharmony_ci 8297db96d56Sopenharmony_ci.. exception:: DomstringSizeErr 8307db96d56Sopenharmony_ci 8317db96d56Sopenharmony_ci Raised when a specified range of text does not fit into a string. This is not 8327db96d56Sopenharmony_ci known to be used in the Python DOM implementations, but may be received from DOM 8337db96d56Sopenharmony_ci implementations not written in Python. 8347db96d56Sopenharmony_ci 8357db96d56Sopenharmony_ci 8367db96d56Sopenharmony_ci.. exception:: HierarchyRequestErr 8377db96d56Sopenharmony_ci 8387db96d56Sopenharmony_ci Raised when an attempt is made to insert a node where the node type is not 8397db96d56Sopenharmony_ci allowed. 8407db96d56Sopenharmony_ci 8417db96d56Sopenharmony_ci 8427db96d56Sopenharmony_ci.. exception:: IndexSizeErr 8437db96d56Sopenharmony_ci 8447db96d56Sopenharmony_ci Raised when an index or size parameter to a method is negative or exceeds the 8457db96d56Sopenharmony_ci allowed values. 8467db96d56Sopenharmony_ci 8477db96d56Sopenharmony_ci 8487db96d56Sopenharmony_ci.. exception:: InuseAttributeErr 8497db96d56Sopenharmony_ci 8507db96d56Sopenharmony_ci Raised when an attempt is made to insert an :class:`Attr` node that is already 8517db96d56Sopenharmony_ci present elsewhere in the document. 8527db96d56Sopenharmony_ci 8537db96d56Sopenharmony_ci 8547db96d56Sopenharmony_ci.. exception:: InvalidAccessErr 8557db96d56Sopenharmony_ci 8567db96d56Sopenharmony_ci Raised if a parameter or an operation is not supported on the underlying object. 8577db96d56Sopenharmony_ci 8587db96d56Sopenharmony_ci 8597db96d56Sopenharmony_ci.. exception:: InvalidCharacterErr 8607db96d56Sopenharmony_ci 8617db96d56Sopenharmony_ci This exception is raised when a string parameter contains a character that is 8627db96d56Sopenharmony_ci not permitted in the context it's being used in by the XML 1.0 recommendation. 8637db96d56Sopenharmony_ci For example, attempting to create an :class:`Element` node with a space in the 8647db96d56Sopenharmony_ci element type name will cause this error to be raised. 8657db96d56Sopenharmony_ci 8667db96d56Sopenharmony_ci 8677db96d56Sopenharmony_ci.. exception:: InvalidModificationErr 8687db96d56Sopenharmony_ci 8697db96d56Sopenharmony_ci Raised when an attempt is made to modify the type of a node. 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ci 8727db96d56Sopenharmony_ci.. exception:: InvalidStateErr 8737db96d56Sopenharmony_ci 8747db96d56Sopenharmony_ci Raised when an attempt is made to use an object that is not defined or is no 8757db96d56Sopenharmony_ci longer usable. 8767db96d56Sopenharmony_ci 8777db96d56Sopenharmony_ci 8787db96d56Sopenharmony_ci.. exception:: NamespaceErr 8797db96d56Sopenharmony_ci 8807db96d56Sopenharmony_ci If an attempt is made to change any object in a way that is not permitted with 8817db96d56Sopenharmony_ci regard to the `Namespaces in XML <https://www.w3.org/TR/REC-xml-names/>`_ 8827db96d56Sopenharmony_ci recommendation, this exception is raised. 8837db96d56Sopenharmony_ci 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ci.. exception:: NotFoundErr 8867db96d56Sopenharmony_ci 8877db96d56Sopenharmony_ci Exception when a node does not exist in the referenced context. For example, 8887db96d56Sopenharmony_ci :meth:`NamedNodeMap.removeNamedItem` will raise this if the node passed in does 8897db96d56Sopenharmony_ci not exist in the map. 8907db96d56Sopenharmony_ci 8917db96d56Sopenharmony_ci 8927db96d56Sopenharmony_ci.. exception:: NotSupportedErr 8937db96d56Sopenharmony_ci 8947db96d56Sopenharmony_ci Raised when the implementation does not support the requested type of object or 8957db96d56Sopenharmony_ci operation. 8967db96d56Sopenharmony_ci 8977db96d56Sopenharmony_ci 8987db96d56Sopenharmony_ci.. exception:: NoDataAllowedErr 8997db96d56Sopenharmony_ci 9007db96d56Sopenharmony_ci This is raised if data is specified for a node which does not support data. 9017db96d56Sopenharmony_ci 9027db96d56Sopenharmony_ci .. XXX a better explanation is needed! 9037db96d56Sopenharmony_ci 9047db96d56Sopenharmony_ci 9057db96d56Sopenharmony_ci.. exception:: NoModificationAllowedErr 9067db96d56Sopenharmony_ci 9077db96d56Sopenharmony_ci Raised on attempts to modify an object where modifications are not allowed (such 9087db96d56Sopenharmony_ci as for read-only nodes). 9097db96d56Sopenharmony_ci 9107db96d56Sopenharmony_ci 9117db96d56Sopenharmony_ci.. exception:: SyntaxErr 9127db96d56Sopenharmony_ci 9137db96d56Sopenharmony_ci Raised when an invalid or illegal string is specified. 9147db96d56Sopenharmony_ci 9157db96d56Sopenharmony_ci .. XXX how is this different from InvalidCharacterErr? 9167db96d56Sopenharmony_ci 9177db96d56Sopenharmony_ci 9187db96d56Sopenharmony_ci.. exception:: WrongDocumentErr 9197db96d56Sopenharmony_ci 9207db96d56Sopenharmony_ci Raised when a node is inserted in a different document than it currently belongs 9217db96d56Sopenharmony_ci to, and the implementation does not support migrating the node from one document 9227db96d56Sopenharmony_ci to the other. 9237db96d56Sopenharmony_ci 9247db96d56Sopenharmony_ciThe exception codes defined in the DOM recommendation map to the exceptions 9257db96d56Sopenharmony_cidescribed above according to this table: 9267db96d56Sopenharmony_ci 9277db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9287db96d56Sopenharmony_ci| Constant | Exception | 9297db96d56Sopenharmony_ci+======================================+=================================+ 9307db96d56Sopenharmony_ci| :const:`DOMSTRING_SIZE_ERR` | :exc:`DomstringSizeErr` | 9317db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9327db96d56Sopenharmony_ci| :const:`HIERARCHY_REQUEST_ERR` | :exc:`HierarchyRequestErr` | 9337db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9347db96d56Sopenharmony_ci| :const:`INDEX_SIZE_ERR` | :exc:`IndexSizeErr` | 9357db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9367db96d56Sopenharmony_ci| :const:`INUSE_ATTRIBUTE_ERR` | :exc:`InuseAttributeErr` | 9377db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9387db96d56Sopenharmony_ci| :const:`INVALID_ACCESS_ERR` | :exc:`InvalidAccessErr` | 9397db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9407db96d56Sopenharmony_ci| :const:`INVALID_CHARACTER_ERR` | :exc:`InvalidCharacterErr` | 9417db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9427db96d56Sopenharmony_ci| :const:`INVALID_MODIFICATION_ERR` | :exc:`InvalidModificationErr` | 9437db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9447db96d56Sopenharmony_ci| :const:`INVALID_STATE_ERR` | :exc:`InvalidStateErr` | 9457db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9467db96d56Sopenharmony_ci| :const:`NAMESPACE_ERR` | :exc:`NamespaceErr` | 9477db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9487db96d56Sopenharmony_ci| :const:`NOT_FOUND_ERR` | :exc:`NotFoundErr` | 9497db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9507db96d56Sopenharmony_ci| :const:`NOT_SUPPORTED_ERR` | :exc:`NotSupportedErr` | 9517db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9527db96d56Sopenharmony_ci| :const:`NO_DATA_ALLOWED_ERR` | :exc:`NoDataAllowedErr` | 9537db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9547db96d56Sopenharmony_ci| :const:`NO_MODIFICATION_ALLOWED_ERR` | :exc:`NoModificationAllowedErr` | 9557db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9567db96d56Sopenharmony_ci| :const:`SYNTAX_ERR` | :exc:`SyntaxErr` | 9577db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9587db96d56Sopenharmony_ci| :const:`WRONG_DOCUMENT_ERR` | :exc:`WrongDocumentErr` | 9597db96d56Sopenharmony_ci+--------------------------------------+---------------------------------+ 9607db96d56Sopenharmony_ci 9617db96d56Sopenharmony_ci 9627db96d56Sopenharmony_ci.. _dom-conformance: 9637db96d56Sopenharmony_ci 9647db96d56Sopenharmony_ciConformance 9657db96d56Sopenharmony_ci----------- 9667db96d56Sopenharmony_ci 9677db96d56Sopenharmony_ciThis section describes the conformance requirements and relationships between 9687db96d56Sopenharmony_cithe Python DOM API, the W3C DOM recommendations, and the OMG IDL mapping for 9697db96d56Sopenharmony_ciPython. 9707db96d56Sopenharmony_ci 9717db96d56Sopenharmony_ci 9727db96d56Sopenharmony_ci.. _dom-type-mapping: 9737db96d56Sopenharmony_ci 9747db96d56Sopenharmony_ciType Mapping 9757db96d56Sopenharmony_ci^^^^^^^^^^^^ 9767db96d56Sopenharmony_ci 9777db96d56Sopenharmony_ciThe IDL types used in the DOM specification are mapped to Python types 9787db96d56Sopenharmony_ciaccording to the following table. 9797db96d56Sopenharmony_ci 9807db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9817db96d56Sopenharmony_ci| IDL Type | Python Type | 9827db96d56Sopenharmony_ci+==================+===========================================+ 9837db96d56Sopenharmony_ci| ``boolean`` | ``bool`` or ``int`` | 9847db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9857db96d56Sopenharmony_ci| ``int`` | ``int`` | 9867db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9877db96d56Sopenharmony_ci| ``long int`` | ``int`` | 9887db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9897db96d56Sopenharmony_ci| ``unsigned int`` | ``int`` | 9907db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9917db96d56Sopenharmony_ci| ``DOMString`` | ``str`` or ``bytes`` | 9927db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9937db96d56Sopenharmony_ci| ``null`` | ``None`` | 9947db96d56Sopenharmony_ci+------------------+-------------------------------------------+ 9957db96d56Sopenharmony_ci 9967db96d56Sopenharmony_ci.. _dom-accessor-methods: 9977db96d56Sopenharmony_ci 9987db96d56Sopenharmony_ciAccessor Methods 9997db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^ 10007db96d56Sopenharmony_ci 10017db96d56Sopenharmony_ciThe mapping from OMG IDL to Python defines accessor functions for IDL 10027db96d56Sopenharmony_ci``attribute`` declarations in much the way the Java mapping does. 10037db96d56Sopenharmony_ciMapping the IDL declarations :: 10047db96d56Sopenharmony_ci 10057db96d56Sopenharmony_ci readonly attribute string someValue; 10067db96d56Sopenharmony_ci attribute string anotherValue; 10077db96d56Sopenharmony_ci 10087db96d56Sopenharmony_ciyields three accessor functions: a "get" method for :attr:`someValue` 10097db96d56Sopenharmony_ci(:meth:`_get_someValue`), and "get" and "set" methods for :attr:`anotherValue` 10107db96d56Sopenharmony_ci(:meth:`_get_anotherValue` and :meth:`_set_anotherValue`). The mapping, in 10117db96d56Sopenharmony_ciparticular, does not require that the IDL attributes are accessible as normal 10127db96d56Sopenharmony_ciPython attributes: ``object.someValue`` is *not* required to work, and may 10137db96d56Sopenharmony_ciraise an :exc:`AttributeError`. 10147db96d56Sopenharmony_ci 10157db96d56Sopenharmony_ciThe Python DOM API, however, *does* require that normal attribute access work. 10167db96d56Sopenharmony_ciThis means that the typical surrogates generated by Python IDL compilers are not 10177db96d56Sopenharmony_cilikely to work, and wrapper objects may be needed on the client if the DOM 10187db96d56Sopenharmony_ciobjects are accessed via CORBA. While this does require some additional 10197db96d56Sopenharmony_ciconsideration for CORBA DOM clients, the implementers with experience using DOM 10207db96d56Sopenharmony_ciover CORBA from Python do not consider this a problem. Attributes that are 10217db96d56Sopenharmony_cideclared ``readonly`` may not restrict write access in all DOM 10227db96d56Sopenharmony_ciimplementations. 10237db96d56Sopenharmony_ci 10247db96d56Sopenharmony_ciIn the Python DOM API, accessor functions are not required. If provided, they 10257db96d56Sopenharmony_cishould take the form defined by the Python IDL mapping, but these methods are 10267db96d56Sopenharmony_ciconsidered unnecessary since the attributes are accessible directly from Python. 10277db96d56Sopenharmony_ci"Set" accessors should never be provided for ``readonly`` attributes. 10287db96d56Sopenharmony_ci 10297db96d56Sopenharmony_ciThe IDL definitions do not fully embody the requirements of the W3C DOM API, 10307db96d56Sopenharmony_cisuch as the notion of certain objects, such as the return value of 10317db96d56Sopenharmony_ci:meth:`getElementsByTagName`, being "live". The Python DOM API does not require 10327db96d56Sopenharmony_ciimplementations to enforce such requirements. 10337db96d56Sopenharmony_ci 1034