void DOMAttrImpl::setValue(const XMLCh *val) { if (fNode.isReadOnly()) { throw DOMException(DOMException::NO_MODIFICATION_ALLOWED_ERR, 0, GetDOMNodeMemoryManager); } // If this attribute was of type ID and in the map, take it out, // then put it back in with the new name. For now, we don't worry // about what happens if the new name conflicts // DOMDocumentImpl *doc = (DOMDocumentImpl *)getOwnerDocument(); if (fNode.isIdAttr()) doc->getNodeIDMap()->remove(this); DOMNode *kid; while ((kid = fParent.fFirstChild) != 0) // Remove existing kids { DOMNode* node = removeChild(kid); if (node) node->release(); } if (val != 0) // Create and add the new one appendChild(doc->createTextNode(val)); fNode.isSpecified(true); fParent.changed(); if (fNode.isIdAttr()) doc->getNodeIDMap()->add(this); }
DOMAttrImpl::DOMAttrImpl(const DOMAttrImpl &other, bool /*deep*/) : DOMAttr(other) , fNode(other.fNode) , fParent (other.fParent) , fName(other.fName) , fSchemaType(other.fSchemaType) { if (other.fNode.isSpecified()) fNode.isSpecified(true); else fNode.isSpecified(false); if (other.fNode.isIdAttr()) { fNode.isIdAttr(true); DOMDocumentImpl *doc = (DOMDocumentImpl *)this->getOwnerDocument(); doc->getNodeIDMap()->add(this); } fParent.cloneChildren(&other); }