我做了一个读取RSS新闻源的程序。它不适用于某些网站(ABC News,TechCrunch,Engadget)。这些网站的体长超过一万卢比。我使用XPATH方法进行解析。也许这个问题是由于我是Bada的新手。我用于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 :(得分:2)
我和你有同样的问题。它不是解析问题,而是下载问题。
下载大文件时,大小超过1万
OnTransactionReadyToRead
不止一次被召唤。
您需要做的是将整个解析代码移动到
OnTransactionCompleted
仅在文件下载完成时调用一次。
我还建议您先将xml保存到文件中。