CharacterData methods:  Update self.length on changes instead of extended
    the __getattr__() handler.

Text.splitText():  Update the length and nodeValue attributes.
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 26923b5..628a375 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -619,10 +619,7 @@
             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)
+        self.length = len(data)
 
     def __repr__(self):
         if len(self.data) > 10:
@@ -644,6 +641,7 @@
     def appendData(self, arg):
         self.data = self.data + arg
         self.nodeValue = self.data
+        self.length = len(self.data)
 
     def insertData(self, offset, arg):
         if offset < 0:
@@ -654,6 +652,7 @@
             self.data = "%s%s%s" % (
                 self.data[:offset], arg, self.data[offset:])
             self.nodeValue = self.data
+            self.length = len(self.data)
 
     def deleteData(self, offset, count):
         if offset < 0:
@@ -665,6 +664,7 @@
         if count:
             self.data = self.data[:offset] + self.data[offset+count:]
             self.nodeValue = self.data
+            self.length = len(self.data)
 
     def replaceData(self, offset, count, arg):
         if offset < 0:
@@ -677,6 +677,7 @@
             self.data = "%s%s%s" % (
                 self.data[:offset], arg, self.data[offset+count:])
             self.nodeValue = self.data
+            self.length = len(self.data)
 
 class Text(CharacterData):
     nodeType = Node.TEXT_NODE
@@ -695,6 +696,8 @@
             else:
                 self.parentNode.insertBefore(newText, next)
         self.data = self.data[:offset]
+        self.nodeValue = self.data
+        self.length = len(self.data)
         return newText
 
     def writexml(self, writer, indent="", addindent="", newl=""):