From 6f9ea6d752a0172a9cd475699830edfbb5a1a124 Mon Sep 17 00:00:00 2001 From: Tinny Ng <tng@apache.org> Date: Thu, 18 Jul 2002 14:49:20 +0000 Subject: [PATCH] DOM: add removeNamedItemAt to DOMAttrMapImpl git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174025 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/dom/impl/DOMAttrMapImpl.cpp | 29 +++++++++++++++++++++++++ src/xercesc/dom/impl/DOMAttrMapImpl.hpp | 1 + 2 files changed, 30 insertions(+) diff --git a/src/xercesc/dom/impl/DOMAttrMapImpl.cpp b/src/xercesc/dom/impl/DOMAttrMapImpl.cpp index 3ded9df81..872a36481 100644 --- a/src/xercesc/dom/impl/DOMAttrMapImpl.cpp +++ b/src/xercesc/dom/impl/DOMAttrMapImpl.cpp @@ -141,6 +141,35 @@ DOMNode *DOMAttrMapImpl::removeNamedItemNS(const XMLCh *namespaceURI, const XMLC return removed; } +// remove the name using index +// avoid calling findNamePoint again if the index is already known +DOMNode * DOMAttrMapImpl::removeNamedItemAt(XMLSize_t index) +{ + DOMNode* removed = DOMNamedNodeMapImpl::removeNamedItemAt(index); + + // Replace it if it had a default value + // (DOM spec level 1 - Element Interface) + if (hasDefaults() && (removed != 0)) + { + DOMAttrMapImpl* defAttrs = ((DOMElementImpl*)fOwnerNode)->getDefaultAttributes(); + + const XMLCh* localName = removed->getLocalName(); + DOMAttr* attr = 0; + if (localName) + attr = (DOMAttr*)(defAttrs->getNamedItemNS(removed->getNamespaceURI(), localName)); + else + attr = (DOMAttr*)(defAttrs->getNamedItem(((DOMAttr*)removed)->getName())); + + if (attr != 0) + { + DOMAttr* newAttr = (DOMAttr*)attr->cloneNode(true); + setNamedItem(newAttr); + } + } + + return removed; +} + /** * Get this AttributeMap in sync with the given "defaults" map. * @param defaults The default attributes map to sync with. diff --git a/src/xercesc/dom/impl/DOMAttrMapImpl.hpp b/src/xercesc/dom/impl/DOMAttrMapImpl.hpp index 98a2eebbb..3afeae9de 100644 --- a/src/xercesc/dom/impl/DOMAttrMapImpl.hpp +++ b/src/xercesc/dom/impl/DOMAttrMapImpl.hpp @@ -98,6 +98,7 @@ public: virtual DOMNode *removeNamedItem(const XMLCh *name); virtual DOMNode *removeNamedItemNS(const XMLCh *namespaceURI, const XMLCh *localName); + virtual DOMNode *removeNamedItemAt(XMLSize_t index); void reconcileDefaultAttributes(const DOMAttrMapImpl* defaults); void moveSpecifiedAttributes(DOMAttrMapImpl* srcmap); -- GitLab