/**\r
* @file AbstractAttributeExtensibleXMLObject.h\r
* \r
- * An abstract implementation of a DOM-caching AttributeExtensibleXMLObject \r
+ * AbstractXMLObject mixin that implements AttributeExtensibleXMLObject\r
*/\r
\r
-#if !defined(__xmltooling_absattrextxmlobj_h__)\r
+#ifndef __xmltooling_absattrextxmlobj_h__\r
#define __xmltooling_absattrextxmlobj_h__\r
\r
#include <map>\r
-#include <xmltooling/AbstractDOMCachingXMLObject.h>\r
+#include <xmltooling/AbstractXMLObject.h>\r
#include <xmltooling/AttributeExtensibleXMLObject.h>\r
\r
-using namespace xercesc;\r
-\r
#if defined (_MSC_VER)\r
#pragma warning( push )\r
#pragma warning( disable : 4250 4251 )\r
namespace xmltooling {\r
\r
/**\r
- * An abstract implementation of a DOM-caching AttributeExtensibleXMLObject.\r
+ * AbstractXMLObject mixin that implements AttributeExtensibleXMLObject.\r
+ * Inherit from this class to add support for attribute wildcarding.\r
*/\r
- class XMLTOOL_API AbstractAttributeExtensibleXMLObject : public virtual AttributeExtensibleXMLObject, public virtual AbstractDOMCachingXMLObject\r
+ class XMLTOOL_API AbstractAttributeExtensibleXMLObject\r
+ : public virtual AttributeExtensibleXMLObject, public virtual AbstractXMLObject\r
{\r
public:\r
virtual ~AbstractAttributeExtensibleXMLObject();\r
\r
- /**\r
- * @see AttributeExtensibleXMLObject::getAttribute()\r
- */\r
- virtual const XMLCh* getAttribute(QName& qualifiedName) const {\r
+ const XMLCh* getAttribute(const QName& qualifiedName) const {\r
std::map<QName,XMLCh*>::const_iterator i=m_attributeMap.find(qualifiedName);\r
return (i==m_attributeMap.end()) ? NULL : i->second;\r
}\r
\r
- /**\r
- * @see AttributeExtensibleXMLObject::setAttribute()\r
- */\r
- virtual void setAttribute(QName& qualifiedName, const XMLCh* value);\r
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false);\r
+ \r
+ const std::map<QName,XMLCh*>& getExtensionAttributes() const {\r
+ return m_attributeMap;\r
+ }\r
+ \r
+ const XMLCh* getXMLID() const {\r
+ return (m_idAttribute == m_attributeMap.end()) ? NULL : m_idAttribute->second;\r
+ }\r
\r
protected:\r
- /**\r
- * Constructor\r
- * \r
- * @param namespaceURI the namespace the element is in\r
- * @param elementLocalName the local name of the XML element this Object represents\r
- * @param namespacePrefix the namespace prefix to use\r
- */\r
- AbstractAttributeExtensibleXMLObject(\r
- const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL\r
- ) : AbstractDOMCachingXMLObject(namespaceURI,elementLocalName, namespacePrefix) {}\r
+ AbstractAttributeExtensibleXMLObject() {\r
+ m_idAttribute = m_attributeMap.end();\r
+ }\r
\r
+ /** Copy constructor. */\r
+ AbstractAttributeExtensibleXMLObject(const AbstractAttributeExtensibleXMLObject& src);\r
+\r
+ /** Map of arbitrary attributes. */\r
std::map<QName,XMLCh*> m_attributeMap;\r
+ \r
+ /** Points to the last attribute designated as an XML ID. */\r
+ std::map<QName,XMLCh*>::const_iterator m_idAttribute;\r
};\r
\r
};\r