예제 #1
0
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);
	}
}
예제 #2
0
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;
	}
}