コード例 #1
0
 void startElement(void *ctx, const char *name, const char **atts)
 {
     CC_UNUSED_PARAM(ctx);
     CC_UNUSED_PARAM(atts);
     std::string sName((char*)name);
     if( sName == "dict" )
     {
         m_pCurDict = new CCDictionary();
         if(m_eResultType == SAX_RESULT_DICT && m_pRootDict == NULL)
         {
             // Because it will call m_pCurDict->release() later, so retain here.
             m_pRootDict = m_pCurDict;
             m_pRootDict->retain();
         }
         m_tState = SAX_DICT;
         
         CCSAXState preState = SAX_NONE;
         if (! m_tStateStack.empty())
         {
             preState = m_tStateStack.top();
         }
         
         if (SAX_ARRAY == preState)
         {
             // add the dictionary into the array
             m_pArray->addObject(m_pCurDict);
         }
         else if (SAX_DICT == preState)
         {
             // add the dictionary into the pre dictionary
             CCAssert(! m_tDictStack.empty(), "The state is wrong!");
             CCDictionary* pPreDict = m_tDictStack.top();
             pPreDict->setObject(m_pCurDict, m_sCurKey.c_str());
         }
         
         m_pCurDict->release();
         
         // record the dict state
         m_tStateStack.push(m_tState);
         m_tDictStack.push(m_pCurDict);
     }
     else if(sName == "key")
     {
         m_tState = SAX_KEY;
     }
     else if(sName == "integer")
     {
         m_tState = SAX_INT;
     }
     else if(sName == "real")
     {
         m_tState = SAX_REAL;
     }
     else if(sName == "string")
     {
         m_tState = SAX_STRING;
     }
     else if (sName == "array")
     {
         m_tState = SAX_ARRAY;
         m_pArray = new CCArray();
         if (m_eResultType == SAX_RESULT_ARRAY && m_pRootArray == NULL)
         {
             m_pRootArray = m_pArray;
             m_pRootArray->retain();
         }
         CCSAXState preState = SAX_NONE;
         if (! m_tStateStack.empty())
         {
             preState = m_tStateStack.top();
         }
         
         if (preState == SAX_DICT)
         {
             m_pCurDict->setObject(m_pArray, m_sCurKey.c_str());
         }
         else if (preState == SAX_ARRAY)
         {
             CCAssert(! m_tArrayStack.empty(), "The state is wrong!");
             CCArray* pPreArray = m_tArrayStack.top();
             pPreArray->addObject(m_pArray);
         }
         m_pArray->release();
         // record the array state
         m_tStateStack.push(m_tState);
         m_tArrayStack.push(m_pArray);
     }
     else
     {
         m_tState = SAX_NONE;
     }
 }