@@ -364,9 +364,10 @@ class NamedNodeMap:
364364 attributes as found in an input document.
365365 """
366366
367- def __init__ (self , attrs , attrsNS ):
367+ def __init__ (self , attrs , attrsNS , ownerElement ):
368368 self ._attrs = attrs
369369 self ._attrsNS = attrsNS
370+ self ._ownerElement = ownerElement
370371
371372 try :
372373 property
@@ -430,6 +431,7 @@ def __setitem__(self, attname, value):
430431 if type (value ) in _StringTypes :
431432 node = Attr (attname )
432433 node .value = value
434+ node .ownerDocument = self ._ownerElement .ownerDocument
433435 else :
434436 if not isinstance (value , Attr ):
435437 raise TypeError , "value must be a string or Attr object"
@@ -445,6 +447,7 @@ def setNamedItem(self, node):
445447 old .unlink ()
446448 self ._attrs [node .name ] = node
447449 self ._attrsNS [(node .namespaceURI , node .localName )] = node
450+ node .ownerElement = self ._ownerElement
448451 return old
449452
450453 def setNamedItemNS (self , node ):
@@ -518,14 +521,18 @@ def getAttributeNS(self, namespaceURI, localName):
518521 def setAttribute (self , attname , value ):
519522 attr = Attr (attname )
520523 # for performance
521- attr .__dict__ ["value" ] = attr .__dict__ ["nodeValue" ] = value
524+ d = attr .__dict__
525+ d ["value" ] = d ["nodeValue" ] = value
526+ d ["ownerDocument" ] = self .ownerDocument
522527 self .setAttributeNode (attr )
523528
524529 def setAttributeNS (self , namespaceURI , qualifiedName , value ):
525530 prefix , localname = _nssplit (qualifiedName )
526531 # for performance
527532 attr = Attr (qualifiedName , namespaceURI , localname , prefix )
528- attr .__dict__ ["value" ] = attr .__dict__ ["nodeValue" ] = value
533+ d = attr .__dict__
534+ d ["value" ] = d ["nodeValue" ] = value
535+ d ["ownerDocument" ] = self .ownerDocument
529536 self .setAttributeNode (attr )
530537
531538 def getAttributeNode (self , attrname ):
@@ -608,7 +615,7 @@ def writexml(self, writer, indent="", addindent="", newl=""):
608615 writer .write ("/>%s" % (newl ))
609616
610617 def _get_attributes (self ):
611- return AttributeList (self ._attrs , self ._attrsNS )
618+ return NamedNodeMap (self ._attrs , self ._attrsNS , self )
612619
613620 try :
614621 property
0 commit comments