mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
Merge c68cb4d6f6 into 7099af8f5e
This commit is contained in:
commit
460cbffb3c
1 changed files with 43 additions and 3 deletions
|
|
@ -32,6 +32,10 @@
|
||||||
|
|
||||||
|
|
||||||
class Node(xml.dom.Node):
|
class Node(xml.dom.Node):
|
||||||
|
"""Base class representing a node in the DOM tree.
|
||||||
|
|
||||||
|
Provides core properties and methods that all DOM nodes must implement.
|
||||||
|
"""
|
||||||
namespaceURI = None # this is non-null only for elements and attributes
|
namespaceURI = None # this is non-null only for elements and attributes
|
||||||
parentNode = None
|
parentNode = None
|
||||||
ownerDocument = None
|
ownerDocument = None
|
||||||
|
|
@ -44,6 +48,7 @@ def __bool__(self):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def toxml(self, encoding=None, standalone=None):
|
def toxml(self, encoding=None, standalone=None):
|
||||||
|
"""Generate a string representation of a DOM."""
|
||||||
return self.toprettyxml("", "", encoding, standalone)
|
return self.toprettyxml("", "", encoding, standalone)
|
||||||
|
|
||||||
def toprettyxml(self, indent="\t", newl="\n", encoding=None,
|
def toprettyxml(self, indent="\t", newl="\n", encoding=None,
|
||||||
|
|
@ -80,6 +85,14 @@ def _get_lastChild(self):
|
||||||
return self.childNodes[-1]
|
return self.childNodes[-1]
|
||||||
|
|
||||||
def insertBefore(self, newChild, refChild):
|
def insertBefore(self, newChild, refChild):
|
||||||
|
"""Insert a new DOM Node before an existing Node.
|
||||||
|
|
||||||
|
newChild
|
||||||
|
The new node to insert
|
||||||
|
refChild
|
||||||
|
The existing node that will be the next sibling of newChild.
|
||||||
|
If None, newChild is appended to the end.
|
||||||
|
"""
|
||||||
if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE:
|
if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE:
|
||||||
for c in tuple(newChild.childNodes):
|
for c in tuple(newChild.childNodes):
|
||||||
self.insertBefore(c, refChild)
|
self.insertBefore(c, refChild)
|
||||||
|
|
@ -112,6 +125,7 @@ def insertBefore(self, newChild, refChild):
|
||||||
return newChild
|
return newChild
|
||||||
|
|
||||||
def appendChild(self, node):
|
def appendChild(self, node):
|
||||||
|
"""Append a child node to an existing node."""
|
||||||
if node.nodeType == self.DOCUMENT_FRAGMENT_NODE:
|
if node.nodeType == self.DOCUMENT_FRAGMENT_NODE:
|
||||||
for c in tuple(node.childNodes):
|
for c in tuple(node.childNodes):
|
||||||
self.appendChild(c)
|
self.appendChild(c)
|
||||||
|
|
@ -129,6 +143,7 @@ def appendChild(self, node):
|
||||||
return node
|
return node
|
||||||
|
|
||||||
def replaceChild(self, newChild, oldChild):
|
def replaceChild(self, newChild, oldChild):
|
||||||
|
"""Replace child node *oldChild* with *newChild*."""
|
||||||
if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE:
|
if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE:
|
||||||
refChild = oldChild.nextSibling
|
refChild = oldChild.nextSibling
|
||||||
self.removeChild(oldChild)
|
self.removeChild(oldChild)
|
||||||
|
|
@ -161,6 +176,7 @@ def replaceChild(self, newChild, oldChild):
|
||||||
return oldChild
|
return oldChild
|
||||||
|
|
||||||
def removeChild(self, oldChild):
|
def removeChild(self, oldChild):
|
||||||
|
"""Remove an existing child."""
|
||||||
try:
|
try:
|
||||||
self.childNodes.remove(oldChild)
|
self.childNodes.remove(oldChild)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
|
@ -177,6 +193,12 @@ def removeChild(self, oldChild):
|
||||||
return oldChild
|
return oldChild
|
||||||
|
|
||||||
def normalize(self):
|
def normalize(self):
|
||||||
|
"""Transform this node into its normalized form.
|
||||||
|
|
||||||
|
Remove empty exclusive Text nodes and concatenate data of
|
||||||
|
remaining contiguous exclusive Text nodes into the first of
|
||||||
|
their nodes.
|
||||||
|
"""
|
||||||
L = []
|
L = []
|
||||||
for child in self.childNodes:
|
for child in self.childNodes:
|
||||||
if child.nodeType == Node.TEXT_NODE:
|
if child.nodeType == Node.TEXT_NODE:
|
||||||
|
|
@ -204,6 +226,12 @@ def normalize(self):
|
||||||
self.childNodes[:] = L
|
self.childNodes[:] = L
|
||||||
|
|
||||||
def cloneNode(self, deep):
|
def cloneNode(self, deep):
|
||||||
|
"""Create and return a duplicate of this node.
|
||||||
|
|
||||||
|
deep
|
||||||
|
If True, recursively clone this node's descendants.
|
||||||
|
If False, clone only this node.
|
||||||
|
"""
|
||||||
return _clone_node(self, deep, self.ownerDocument or self)
|
return _clone_node(self, deep, self.ownerDocument or self)
|
||||||
|
|
||||||
def isSupported(self, feature, version):
|
def isSupported(self, feature, version):
|
||||||
|
|
@ -1334,6 +1362,12 @@ def _get_internalSubset(self):
|
||||||
return self.internalSubset
|
return self.internalSubset
|
||||||
|
|
||||||
def cloneNode(self, deep):
|
def cloneNode(self, deep):
|
||||||
|
"""Create and return a duplicate of this node.
|
||||||
|
|
||||||
|
deep
|
||||||
|
If True, recursively clone this node's descendants.
|
||||||
|
If False, clone only this node.
|
||||||
|
"""
|
||||||
if self.ownerDocument is None:
|
if self.ownerDocument is None:
|
||||||
# it's ok
|
# it's ok
|
||||||
clone = DocumentType(None)
|
clone = DocumentType(None)
|
||||||
|
|
@ -1896,9 +1930,15 @@ def renameNode(self, n, namespaceURI, name):
|
||||||
|
|
||||||
|
|
||||||
def _clone_node(node, deep, newOwnerDocument):
|
def _clone_node(node, deep, newOwnerDocument):
|
||||||
"""
|
"""Create and return a clone of a DOM node.
|
||||||
Clone a node and give it the new owner document.
|
|
||||||
Called by Node.cloneNode and Document.importNode
|
node
|
||||||
|
The DOM node to clone.
|
||||||
|
deep
|
||||||
|
If True, recursively clone the node's descendants.
|
||||||
|
If False, only clone the node itself.
|
||||||
|
newOwnerDocument
|
||||||
|
The document that will own the cloned node.
|
||||||
"""
|
"""
|
||||||
if node.ownerDocument.isSameNode(newOwnerDocument):
|
if node.ownerDocument.isSameNode(newOwnerDocument):
|
||||||
operation = xml.dom.UserDataHandler.NODE_CLONED
|
operation = xml.dom.UserDataHandler.NODE_CLONED
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue