iphone - Parsing Local XML File Works, Downloaded XML File Doesn't -
i have problem when fetch xml file internet , parse it, error:
error while parsing document: error domain=smxmldocumenterrordomain code=1 "malformed xml document. error @ line 1:1." userinfo=0x886e880 {linenumber=1, columnnumber=1, nslocalizeddescription=malformed xml document. error @ line 1:1., nsunderlyingerror=0x886e7c0 "the operation couldn’t completed. (nsxmlparsererrordomain error 5.)"}
here extract code (i believe showing relevant code, if need more, please ask.)
// create url request , set url nsurl *url = [nsurl urlwithstring:@"http://***.xml"]; nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url]; // display network activity indicator [[uiapplication sharedapplication] setnetworkactivityindicatorvisible:yes]; // perform request on new thread don't block ui dispatch_queue_t downloadqueue = dispatch_queue_create("download queue", null); dispatch_async(downloadqueue, ^{ nserror* err = nil; nshttpurlresponse* rsp = nil; // perform request synchronously on thread nsdata *rspdata = [nsurlconnection sendsynchronousrequest:request returningresponse:&rsp error:&err]; // once response received, handle on main thread in case ui updates dispatch_async(dispatch_get_main_queue(), ^{ // hide network activity indicator [[uiapplication sharedapplication] setnetworkactivityindicatorvisible:no]; if (rspdata == nil || (err != nil && [err code] != noerr)) { // if there no data received, or error... nslog(@"no data received."); } else { // cache file in cache directory nsarray* paths = nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes); nsstring* path = [[paths objectatindex:0] stringbyappendingpathcomponent:@"init.xml"]; //nslog(@"%@",path); [[nsfilemanager defaultmanager] removeitematpath:path error:nil]; [data writetofile:path atomically:yes]; //nsstring *samplexml = [[nsbundle mainbundle] pathforresource:@"sample" oftype:@"xml"]; nsdata *data = [nsdata datawithcontentsoffile:path]; // create new smxmldocument contents of sample.xml nserror *error; smxmldocument *document = [smxmldocument documentwithdata:data error:&error]; // check errors if (error) { nslog(@"error while parsing document: %@", error); // return; }
firstly, have connected iphone xml feed has fetched , written path of variable path. check errors in xml document , error every time.
however, if use local xml file have placed in main folder of application there no problem fetching data.
using code:
nsstring *samplexml = [[nsbundle mainbundle] pathforresource:@"sample" oftype:@"xml"];
so have idea can have done wrong? seems if doesn't download , store xml file iphone's cache, nslog(); seems show differently. local file same file on internet.
furthermore, tried save file path without results, though.
a couple of observations:
the key issue appear retrieved data in
rspdata
, when write temporary file, you're writingdata
, notrspdata
. change line says:[data writetofile:path atomically:yes];
to
[rspdata writetofile:path atomically:yes];
frankly, don't see
data
variable defined @ point (do have ivar lingering about?). i'd ruthless getting rid of ivars or other variables don't need, don't accidentally refer unused variable. anyway, userspdata
retrieved rather other variable.why writing file, read file
nsdata
pass xml parser? seems entirely unnecessary. go ahead , userspdata
retrieved. if want savensdata
file can examine later debugging purposes, that's fine. there's no point in re-retrievingnsdata
file, have inrspdata
already.if encounter these errors in future, feel free examine contents of
nsdata
variable debugging line of code, like:nslog(@"rspdata = %@", [[nsstring alloc] initwithdata:rspdata encoding:nsutf8stringencoding]);
when that, can @ string rendition of
nsdata
, , problem become self evident.as complete aside, in debugging error handler, have line says:
nslog(@"no data received.");
i might suggest include errors might provided, e.g.:
nslog(@"no data received: error = %@", err);
ios provides useful error messages, should avail of those.
Comments
Post a Comment