2010-11-23 23 views
0

J'ai fait un programme qui lit les flux de nouvelles rss. Ce ne fonctionne pas pour certains des sites Web comme (ABC News, TechCrunch, Engadget). Ces sites ayant leur longueur de corps plus d'un lakh. J'utilise la méthode XPATH pour l'analyse. Peut-être ce problème en raison de je suis nouveau à Bada. Le code que j'utilise pour l'analyse XML estL'analyse XML échoue dans bada

void 
addfeed::OnTransactionReadyToRead(HttpSession& httpSession, HttpTransaction& httpTransaction, int availableBodyLen) 
{ 
    pFrame = Osp::App::Application::GetInstance()->GetAppFrame()->GetFrame(); 
    FormMgr* pFormMgr = dynamic_cast<FormMgr*> (pFrame->GetControl("FormMgr")); 
    bool flag1=0; 
    AppLog("####### OnTransactionReadyToRead! #######"); 

    HttpResponse* pHttpResponse = httpTransaction.GetResponse(); 
    if (pHttpResponse->GetStatusCode() == NET_HTTP_STATUS_OK) 
    { 
     AppLog("%d",availableBodyLen); 
     HttpHeader* pHttpHeader = pHttpResponse->GetHeader(); 

     String* tempHeaderString = pHttpHeader->GetRawHeaderN(); 

     ByteBuffer* pBuffer = pHttpResponse->ReadBodyN(); 

        String str((const char*)pBuffer->GetPointer()); 
     AppLog("Response: %s",str.GetPointer()); 

     int limit(pBuffer->GetLimit()); 
     AppLog("Limit: %d",limit); 

     xmlDoc * doc = NULL; 
        xmlXPathContextPtr xpathCtx; 
     xmlXPathObjectPtr xpathtitle; 
     xmlXPathObjectPtr descriptionObj; 
     xmlXPathObjectPtr linkObj; 
     xmlXPathObjectPtr pubdateObj; 

     doc = xmlParseMemory((const char*)pBuffer->GetPointer(),pBuffer->GetLimit());// Here itself my code fails 

     if(doc==NULL) 
     { 
      flag1=1; 
      AppLog("Failed to load xml doc!"); 
      xmlFreeDoc(doc); 
      xmlCleanupParser(); 
     } 
     else 
     { 
     AppLog("InTo XML Parsing"); 
     /* Create xpath evaluation context */ 
     xpathCtx = xmlXPathNewContext(doc); 
     if(xpathCtx == NULL) 
     { 
       AppLog("Error: unable to create new XPath context"); 
       xmlFreeDoc(doc); 
     } 

     /* Evaluate xpath expression */ 
     xpathtitle = xmlXPathEvalExpression((xmlChar*)"//item/title", xpathCtx); 
     if(xpathtitle == NULL) 
     { 
       AppLog("Error: unable to evaluate xpath expression"); 
       xmlXPathFreeContext(xpathCtx); 
       xmlFreeDoc(doc); 
     } 
     descriptionObj = xmlXPathEvalExpression((xmlChar*)"//item/description",xpathCtx); 
     if(descriptionObj == NULL) 
     { 
       AppLog("Error: unable to evaluate xpath expression"); 
       xmlXPathFreeContext(xpathCtx); 
       xmlFreeDoc(doc); 
     } 
     linkObj = xmlXPathEvalExpression((xmlChar*)"//item/link",xpathCtx); 
     if(linkObj==NULL) 
     { 
      AppLog("Error: unable to evaluate xpath expression"); 
      xmlXPathFreeContext(xpathCtx); 
      xmlFreeDoc(doc); 
     } 
     pubdateObj=xmlXPathEvalExpression((xmlChar*)"//item/pubDate",xpathCtx); 
     if(pubdateObj==NULL) 
     { 
      AppLog("Error: unable to evaluate xpath expression"); 
      xmlXPathFreeContext(xpathCtx); 
      xmlFreeDoc(doc); 
     } 
     get_xpath_titles1(xpathtitle->nodesetval); 
     get_xpath_description1(descriptionObj->nodesetval); 
     get_xpath_link1(linkObj->nodesetval); 
     get_xpath_pubdate1(pubdateObj->nodesetval); 

     xmlFreeDoc(doc); 
     xmlCleanupParser(); 

     delete tempHeaderString; 
     delete pBuffer; 
     } 
    } 
    else 
    { 
     flag1=1; 
    } 
    if(flag1==1) 
    { 
     pFormMgr->SendUserEvent(FormMgr::REQUEST_ID_ADD_FEED_FORM,null); 
    } 
} 
+0

encore des problèmes? –

+0

@Circadian: oui – ArulRaj

Répondre

2

J'ai eu le même problème que vous. Ce n'est pas un problème d'analyse, mais plutôt un problème de téléchargement.

Lors du téléchargement de gros fichiers, dans votre cas plus d'un lakh

OnTransactionReadyToRead 

est appelé plus d'une fois.

Ce que vous devez faire est de déplacer tout le code d'analyse syntaxique à

OnTransactionCompleted 

qui est appelé une seule fois, lorsque la fin du téléchargement de fichiers.

Je suggère également que vous enregistrez d'abord le fichier XML dans un fichier.

+1

Hey Circadian merci pour votre réponse. Votre solution fonctionne parfaitement. +100 votes pour toi. – ArulRaj

+0

Bonjour Circadian, Pouvez-vous aider à analyser web xml dans bada 1.0? –