void DAOImpl::End(const char *el) { m_currNode = m_currNode->m_parent; // others are siblings // do we ended array if(m_inArray && ACE_OS::strcmp(m_arrayName.c_str(), el) == 0 ) { m_arrayContent = "<" + m_arrayType + ">" + m_arrayContent; Field fld; fld.FromString(m_arrayContent); m_currNode->m_fieldMap[m_arrayName] = fld; // clear temp vars m_inArray = 0; m_arrayName.clear(1); m_arrayType.clear(1); m_arrayContent.clear(1); } }
void DAOImpl::Start(const char *el, const char **attr) { //if( ACE_OS::strcmp(el, "Entity") == 0 ) { // return; //} static int elementID = 0; String elementName; if( m_rootNode == NULL ) { m_rootNode = new CXMLTreeNode( NULL ); m_rootNode->m_name = el; m_currNode = m_rootNode; } else { // we have to add this node elementName = el; int nameLen = ACE_OS::strlen(el); CXMLTreeNode* pNode = new CXMLTreeNode( m_currNode ); if( (ACE_OS::strcasecmp(el, "_") == 0 || (nameLen > 2 && el[nameLen-2]==':' && el[nameLen-1]=='_')) && attr[0] != NULL ) { elementName = attr[1]; } CXMLTreeNode::MapStringToNode::const_iterator iter = m_currNode->m_subNodesMap.find(elementName); if( iter != m_currNode->m_subNodesMap.end() ) { char newName[100]; elementID++; ACE_OS::sprintf(newName,"%s%d", elementName.c_str(), elementID); pNode->m_name = newName; } else { pNode->m_name = elementName; } m_currNode->m_subNodesMap[pNode->m_name.c_str()] = pNode; m_currNode = pNode; } int i; String fieldString, type, value; if( !m_inArray && ACE_OS::strcasecmp(el, "cdb:_") == 0 ) { m_inArray = 1; m_arrayName = m_currNode->m_parent->m_name; m_arrayType = "StringArray"; } for (i = 0; attr[i]; i += 2) { //printf(" %s %s='%s'\n", el, attr[i], attr[i + 1]); if( m_inArray ) { m_arrayContent = m_arrayContent + attr[i+1] + ","; } else { type = attr[i]; value = attr[i+1]; fieldString = "<String>" + value; Field fld; fld.FromString(fieldString); m_currNode->m_fieldMap[type] = fld; } } // do we have an array if( !m_inArray && type.find("Array") != String::npos ) { m_inArray = 1; m_arrayName = el; m_arrayType = type; return; } }