- for (map<QName,XMLCh*>::iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++)
- XMLString::release(&(i->second));
+#ifdef XMLTOOLING_XERCESC_HAS_XMLBYTE_RELEASE
+ static void (*release)(XMLCh**) = &XMLString::release;
+#else
+ static void (*release)(XMLCh**,MemoryManager*) = &XMLString::release;
+#endif
+ for_each(
+ m_attributeMap.begin(), m_attributeMap.end(),
+ lambda::bind(
+ release,
+ &lambda::bind(&map<xmltooling::QName,XMLCh*>::value_type::second, boost::ref(_1))
+#ifndef XMLTOOLING_XERCESC_HAS_XMLBYTE_RELEASE
+ ,XMLPlatformUtils::fgMemoryManager
+#endif
+ )
+ );
+}
+
+const XMLCh* AbstractAttributeExtensibleXMLObject::getAttribute(const xmltooling::QName& qualifiedName) const
+{
+ map<xmltooling::QName,XMLCh*>::const_iterator i = m_attributeMap.find(qualifiedName);
+ return (i != m_attributeMap.end()) ? i->second : nullptr;