diff options
Diffstat (limited to 'Lib/xml/dom')
-rw-r--r-- | Lib/xml/dom/minidom.py | 80 |
1 files changed, 73 insertions, 7 deletions
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py index 81315e7..26923b5 100644 --- a/Lib/xml/dom/minidom.py +++ b/Lib/xml/dom/minidom.py @@ -613,24 +613,76 @@ class ProcessingInstruction(Node): def writexml(self, writer, indent="", addindent="", newl=""): writer.write("%s<?%s %s?>%s" % (indent,self.target, self.data, newl)) -class Text(Node): - nodeType = Node.TEXT_NODE - nodeName = "#text" - attributes = None - childNodeTypes = () - +class CharacterData(Node): def __init__(self, data): if type(data) not in _StringTypes: raise TypeError, "node contents must be a string" Node.__init__(self) self.data = self.nodeValue = data + def __getattr__(self, name): + if name == "length": + return len(self.data) + def __repr__(self): if len(self.data) > 10: dotdotdot = "..." else: dotdotdot = "" - return "<DOM Text node \"%s%s\">" % (self.data[0:10], dotdotdot) + return "<DOM %s node \"%s%s\">" % ( + self.__class__.__name__, self.data[0:10], dotdotdot) + + def substringData(self, offset, count): + if offset < 0: + raise xml.dom.IndexSizeErr("offset cannot be negative") + if offset >= len(self.data): + raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") + if count < 0: + raise xml.dom.IndexSizeErr("count cannot be negative") + return self.data[offset:offset+count] + + def appendData(self, arg): + self.data = self.data + arg + self.nodeValue = self.data + + def insertData(self, offset, arg): + if offset < 0: + raise xml.dom.IndexSizeErr("offset cannot be negative") + if offset >= len(self.data): + raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") + if arg: + self.data = "%s%s%s" % ( + self.data[:offset], arg, self.data[offset:]) + self.nodeValue = self.data + + def deleteData(self, offset, count): + if offset < 0: + raise xml.dom.IndexSizeErr("offset cannot be negative") + if offset >= len(self.data): + raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") + if count < 0: + raise xml.dom.IndexSizeErr("count cannot be negative") + if count: + self.data = self.data[:offset] + self.data[offset+count:] + self.nodeValue = self.data + + def replaceData(self, offset, count, arg): + if offset < 0: + raise xml.dom.IndexSizeErr("offset cannot be negative") + if offset >= len(self.data): + raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") + if count < 0: + raise xml.dom.IndexSizeErr("count cannot be negative") + if count: + self.data = "%s%s%s" % ( + self.data[:offset], arg, self.data[offset+count:]) + self.nodeValue = self.data + +class Text(CharacterData): + nodeType = Node.TEXT_NODE + nodeName = "#text" + attributes = None + childNodeTypes = () def splitText(self, offset): if offset < 0 or offset > len(self.data): @@ -648,6 +700,15 @@ class Text(Node): def writexml(self, writer, indent="", addindent="", newl=""): _write_data(writer, "%s%s%s"%(indent, self.data, newl)) + +class CDATASection(Text): + nodeType = Node.CDATA_SECTION_NODE + nodeName = "#cdata-section" + + def writexml(self, writer, indent="", addindent="", newl=""): + _write_data(writer, "<![CDATA[%s]]>" % self.data) + + def _nssplit(qualifiedName): fields = _string.split(qualifiedName, ':', 1) if len(fields) == 2: @@ -781,6 +842,11 @@ class Document(Node): t.ownerDocument = self return t + def createCDATASection(self, data): + c = CDATASection(data) + c.ownerDocument = self + return c + def createComment(self, data): c = Comment(data) c.ownerDocument = self |