2010-11-23 18 views
0

RSSフィードを読むプログラムを作成しました。そのようなウェブサイト(ABCニュース、TechCrunch、Engadget)のようないくつかのために働いていない。これらのウェブサイトの長さは1ラフ以上です。私は解析のためにXPATHメソッドを使用します。おそらく、この問題は私がBadaに新しいことだ。 XMLの解析に使用しているコードはXML解析が失敗しました

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

まだ問題がありますか? –

+0

@Circadian:はい – ArulRaj

答えて

2

私はあなたと同じ問題がありました。これは解析の問題ではなく、むしろダウンロードの問題です。

大きなファイルをダウンロードするとき、あなたのケースで1万ルピー

OnTransactionReadyToRead 

より大きいが複数回呼び出されます。あなたがする必要がどのような

は、ファイルのダウンロードが完了したときに、一度だけ呼び出され

OnTransactionCompleted 

に全体の解析コードを移動しています。

xmlを最初にファイルに保存することをお勧めします。

+1

ご返信いただきありがとうございます。あなたのソリューションは完璧に動作します。あなたのための+100票 – ArulRaj

+0

Hello Circadian、bada 1.0のweb xmlを解析できますか? –

関連する問題