I'm trying to gather the data from an XML file and add to an array. The data looks something like this..
<Placemark>
<name><![CDATA[Kingsway (Start)]]></name>
<description><![CDATA[]]></description>
<TimeStamp><when>2014-04-30T17:03:28.681Z</when></TimeStamp>
<styleUrl>#start</styleUrl>
<Point>
<coordinates>-1.408894,52.13977,176.0</coordinates>
</Point>
</Placemark>
<Placemark id="tour">
<name><![CDATA[Kingsway]]></name>
<description><![CDATA[]]></description>
<styleUrl>#track</styleUrl>
<ExtendedData>
<Data name="type"><value><![CDATA[running]]></value></Data>
</ExtendedData>
<gx:MultiTrack>
<altitudeMode>absolute</altitudeMode>
<gx:interpolate>1</gx:interpolate>
<gx:Track>
<when>2014-04-30T17:03:28.681Z</when>
<gx:coord>-1.408894 52.13977 176.0</gx:coord>
<when>2014-04-30T17:03:31.071Z</when>
<gx:coord>-1.407839 52.139166 174.0</gx:coord>
<when>2014-04-30T17:03:32.070Z</when>
<gx:coord>-1.407486 52.138963 175.0</gx:coord>
<when>2014-04-30T17:03:33.073Z</when>
<gx:coord>-1.407142 52.138755 174.0</gx:coord>
<when>2014-04-30T17:03:34.073Z</when>
<gx:coord>-1.406805 52.138555 173.0</gx:coord>
<when>2014-04-30T17:03:35.073Z</when>
<gx:coord>-1.40663 52.138441 173.0</gx:coord>
<when>2014-04-30T17:03:36.601Z</when>
<gx:coord>-1.405929 52.138027 172.0</gx:coord>
<when>2014-04-30T17:03:37.601Z</when>
<gx:coord>-1.405574 52.137817 172.0</gx:coord>
I'm only interested in the values following the tag gx:coord, so I'm parsing the file using the code below.
- (void)loadMap:(NSInteger)selJourney
{
NSString *journey = #"KML_Sample";
NSString *path = [[NSBundle mainBundle] pathForResource:journey ofType:#"kml"];
[self parseXMLFile:path];
}
- (void)parseXMLFile:(NSString *)pathToFile
{
NSXMLParser *addressParser;
[myParser setShouldProcessNamespaces:NO];
[myParser setShouldReportNamespacePrefixes:NO];
[myParser setShouldResolveExternalEntities:NO];
NSURL *xmlURL = [NSURL fileURLWithPath:pathToFile];
myParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[myParser setDelegate:self];
[myParser setShouldResolveExternalEntities:YES];
[myParser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ( [elementName isEqualToString:#"gx:coord"] ) {
polylineList = [[NSMutableArray alloc] init];
}
}
When the parser method runs and it finds the right elementName I want to retrieve the string data after the tag and add it to my NSMutableArray polylineList.
The other parameters in parser all return nil so am I missing something?
I managed to solve this myself using the method below
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ((addRec) && (![string isEqualToString:#"\n"]))
{
NSArray *tmpArray = [[NSArray alloc] initWithObjects:string, nil];
if (polylineList.count > 0)
[polylineList addObject:string];
else
polylineList = [[NSMutableArray alloc] initWithArray:tmpArray];
}
}
I hope this is helpful to those who are using KML, MapKit or just parsing XML.
Related
I'm new to this web service in iOS. I made a sample web service app and made the first stage login successfully. While checking the url in web after login I got this output :
<Rows>
<Row>
<style>LW6001TA</style>
<thumbnail1>
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
</thumbnail1>
</Row>
</Rows>
How to get these stuff back in Xcode and view it ? This is the first time I work on this web service I have no idea to get back this response back in Xcode. Please Help !
-(void)parseTheData
{
//Here convert your response to NSData type (NSData *data = [NSData data]; , i have used just for example)
NSData *data = [NSData data];
// Make sure that there is data.
if (data != nil) {
self.xmlParser = [[NSXMLParser alloc] initWithData:data];
self.xmlParser.delegate = self;
// Initialize the mutable string that we'll use during parsing.
self.foundValue = [[NSMutableString alloc] init];
// Start parsing.
[self.xmlParser parse];
}
}
//Delegate methods
-(void)parserDidStartDocument:(NSXMLParser *)parser{
// Initialize the array.
self.arrNeighboursData = [[NSMutableArray alloc] init];
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
// When the parsing has been finished then simply reload the table view or do what ever you want
}
-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(#"%#", [parseError localizedDescription]);
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
// If the current element name is equal to "geoname" then initialize the temporary dictionary.
if ([elementName isEqualToString:#"Row"]) {
self.dictTempDataStorage = [[NSMutableDictionary alloc] init];
}
// Keep the current element.
self.currentElement = elementName;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:#"thumbnail1"]) {
// Store the data like this
[self.dictTempDataStorage setObject:[NSString stringWithString:self.foundValue] forKey:#"thumbnail1"];
}
else if ([elementName isEqualToString:#"style"]){
// Store the data like this
[self.dictTempDataStorage setObject:[NSString stringWithString:self.foundValue] forKey:#"style"];
}
else if ([elementName isEqualToString:#"Row"])
{
//Add the dictionary in array and remove the data from dictionary, so that we can reuse the dictionary
[self.arrNeighboursData addObject:self.dictTempDataStorage];
self.dictTempDataStorage = nil;
}
// Clear the mutable string.
[self.foundValue setString:#""];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
// Store the found characters if only we're interested in the current element.
if (![string isEqualToString:#"\n"]) {
[self.foundValue appendString:string];
}
}
Here I am just showing you the way to move on.
In ios i am using Xml soap parsing This is my response
<InsertResponse xmlns="http://OrderMe.solyn.in/"><InsertResult>[{"Result":"Success","AccessToken":"f60da1f1-40d7-483d-880a-82348dc20934","AppUserId":"35"}]</InsertResult></InsertResponse>
Then i am using This code for Get Response
-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string {
if (elementFound) {
// NSLog(#"%#",soapResults);
[soapResults appendString: string];
if ([Type isEqualToString:#"InsertResponse"] ) {
//--- Retrieving text of an element that is found---
NSLog(#"%#",string);
NSString *str = [[NSString alloc]initWithData:string encoding:NSUTF8StringEncoding];
NSArray *allData = [str JSONValue];
//NSString *loginID=[NSString stringWithFormat:#"%#",string];
//NSLog(#"Login ID Returned from web service is : %#",loginID);
}
}
}
in this code ** NSLog(#"%#",string);** this string is print
[{"Result":"Success","AccessToken":"f60da1f1-40d7-483d-880a-82348dc20934","AppUserId":"35"}]
so i dont know how to convert this string in array
I am wating response
please share your valuable knowledge
Regards,
Nishant Chandwani
Thanks .
You need to parse this string as JSON:
NSString *string = #"[{\"Result\":\"Success\",\"AccessToken\":\"f60da1f1-40d7-483d-880a-82348dc20934\",\"AppUserId\":\"35\"}]";
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
First this is xml parser.So how can we get the values from this.Let's come to below coding
In your .h part
//Step 1 : Add the Delegate classes
First of all you should add <NSXMLParserDelegate>
//Step 2 : Create necessary objects
NSXMLParser *parser;
NSMutableData *ReceviedData;
NSMutableString *currentStringValue;
NSMutableArray *arrayResult;
NSMutableArray *arrayAccessToken;
NSMutableArray *arrayAppUserId;
In your .m part
//Step 3 - Allocate your all Arrays in your viewDidLoad method
arrayAppUserId = [NSMutableArray alloc]init];
arrayResult = [NSMutableArray alloc]init];
arrayAccessToken = [NSMutableArray alloc]init];
//Step 4 - Create Connection in your viewDidLoad Like
[self createConnection:#"http://www.google.com"];//give your valid url.
-(void)createConnection:(NSString *)urlString
{
NSURL *url = [NSURL URLWithString:urlString];
//Step 5 - parser delegate methods are using NSURLConnectionDelegate class or not.
BOOL success;
if (!parser)
{
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
parser.delegate = self;
parser.shouldResolveExternalEntities = YES;
success = [parser parse];
NSLog(#"Success : %c",success);
}
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(#"Current Element Name : %#",elementName);
if ([elementName isEqualToString:#"Result"])
{
NSLog(#"The Result is==%#",elementName);
}
if ([elementName isEqualToString:#"AccessToken"])
{
NSLog(#"The AccessToken is==%#",elementName);
}
if ([elementName isEqualToString:#"AppUserId"])
{
NSLog(#"The appUserId is==%#",elementName);
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentStringValue = [[NSMutableString alloc] initWithString:string];
NSLog(#"Current String Value : %#",currentStringValue);
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:#"Result"])
{
[arrayResult addObject:currentStringValue];
}
if ([elementName isEqualToString:#"AccessToken"])
{
[arrayAccessToken addObject:currentStringValue];
}
if ([elementName isEqualToString:#"AppUserId"])
{
[arrayAppUserId addObject:currentStringValue];
}
currentStringValue = nil;
}
I am creating an IOS application. In which I have to use SOAP web-service to get some details. So that I have used SUDZ-C to generate the stub. I can able to call web-service and got the response. But I can't parse the response. The below is the XML response.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ViewAppTrackResponse xmlns="http://service.cmp.app.com">
<ViewAppTrackResponseReturn>
<ns1:monthBO xmlns:ns1="http://response.cmp.app.com">
<monthListItem>
<ns2:date xmlns:ns2="http://bean.cmp.app.com">1-2-2014, Saturday (nonworking day)</ns2:date>
<ns3:lockStatus xmlns:ns3="http://bean.cmp.app.com">N</ns3:lockStatus>
<ns4:dailyTime xsi:nil="true" xmlns:ns4="http://bean.cmp.app.com"/>
<ns5:taskListNew xsi:nil="true" xmlns:ns5="http://bean.cmp.app.com"/>
</monthListItem>
<monthListItem>
<ns6:date xmlns:ns6="http://bean.cmp.app.com">2-2-2014, Sunday (nonworking day)</ns6:date>
<ns7:lockStatus xmlns:ns7="http://bean.cmp.app.com">N</ns7:lockStatus>
<ns8:dailyTime xmlns:ns8="http://bean.cmp.app.com">04:00</ns8:dailyTime>
<ns9:taskListNew xmlns:ns9="http://bean.cmp.app.com">
<taskListItem>
<ns9:trackId>1070</ns9:trackId>
<ns9:taskId>14</ns9:taskId>
</taskListItem>
<taskListItem>
<ns9:trackId>1094</ns9:trackId>
<ns9:taskId>44</ns9:taskId>
</taskListItem>
</ns9:taskListNew>
</monthListItem>
<monthListItem>
<ns10:date xmlns:ns10="http://bean.cmp.app.com">3-2-2014, Monday</ns10:date>
<ns11:lockStatus xmlns:ns11="http://bean.cmp.app.com">N</ns11:lockStatus>
<ns12:dailyTime xmlns:ns12="http://bean.cmp.app.com">08:00</ns12:dailyTime>
<ns13:taskListNew xmlns:ns13="http://bean.cmp.app.com">
<taskListItem>
<ns13:trackId>1071</ns13:trackId>
<ns13:taskId>14</ns13:taskId>
</taskListItem>
<taskListItem>
<ns13:trackId>1073</ns13:trackId>
<ns13:taskId>44</ns13:taskId>
</taskListItem>
</ns13:taskListNew>
</monthListItem>
</ns1:monthBO>
<ns14:userId xsi:nil="true" xmlns:ns114="http://response.cmp.app.com"/>5</ns14:userId>
</ViewAppTrackResponseReturn>
</ViewAppTrackResponse>
</soapenv:Body>
</soapenv:Envelope>
Can anyone help me to parse this response. This will helpful for me.
LibXML2 is included in Cocoa.
http://www.raywenderlich.com/553/xml-tutorial-for-ios-how-to-choose-the-best-xml-parser-for-your-iphone-project
http://www.cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html
You can use NSXMLParser class to parse this.Using its delegate methods you can parse. I am posting my try to parse your xml.It is not completed.I am giving you a basic code for parsing. You have to do the remaining.
Here "xmlInput" is of type NSString with your xmlstring.
NSData* xmlData = [xmlInput dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser * xmlParser = [[NSXMLParser alloc] initWithData:[xmlData copy]];
[xmlParser setDelegate:(id)self];
[xmlParser setShouldResolveExternalEntities: YES];
[xmlParser parse];
Create an xmlparser object and input your xmlData.Set its delegates.
//this delegate calls when parsing start.Only once.
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
recordResults = NO;//declared in .h
MonthFlag = NO;//declared in .h
TaskFlag = NO;//declared in .h
Arry = nil;//declared in .h
}
// This delgate calls when each tag name is found.
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
attributes: (NSDictionary *)attributeDict
{
strElementName = [elementName copy];//strElementName is declared in .h
NSLog(#"%#",strElementName);
if([elementName isEqualToString:#"monthListItem"]){
MonthFlag = YES;
}
if([elementName isEqualToString:#"taskListItem"]){
TaskFlag = YES;
}
strElementValue = #""; //strElementValue is declared in .h
}
//This is called when each tag value is found.
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
strElementValue = [NSString stringWithFormat:#"%#%#", strElementValue,[string copy]];
NSLog(#"%#",strElementValue);
//NSLog(#"%# : %#",strElmentName,strElementValue);
recordResults=(strElementValue.length > 0);
}
// This deleagte will call in the end of each tag name.
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(#"%# - %#",elementName,strElementValue);
if (recordResults) {
if (MonthFlag) {
if(dicTemp==nil){
dicTemp = [[NSMutableDictionary alloc] init];
for (int i=0; i<10; i++) {
[dicTemp setObject:#"" forKey:strElementName];
}
}
[dicTemp setObject:strElementValue forKey:elementName ];
}
}
if(([elementName isEqualToString:#"monthListItem"] ) && dicTemp!=nil) {
if(Arry==nil)Arry = [[NSMutableArray alloc] init];
[Arry addObject:[dicTemp copy]];
dicTemp = nil;
[dicTemp release];
MonthFlag = NO;
NSLog(#"arry test %#",[Arry description]);
}
}
// This delegate will call when parsing finishes . only once
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
recordResults = NO;
}
I was having issues parsing XML, so I went through my code with NSLogs and noticed
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
was not called.
My XML:
<?xml version="1.0"?>
<locations>
<location>
<name>Americas</name>
<address></address>
<gid>CoQBdAAAAE2tdzw4RGvnvaUZTk6N1ByNtosmD--ZYfcmkkPkR6R6v_nN9gJCO1INOVg-S5rzy7BATEUmvAQzh8hClafZbph2wSgfD28gXNJAttXLUbqzQMaql3rVbisSUv2a2r_H6ktOSaI5lLvf0GNthT5jn2JfAdD_HfUls6qhMvrm5e5XEhDcF5uRjlfpSqI_aciS_QPaGhQVVHenbOKZBQMSoCzsoIsdfw313Q</gid>
<type>
<1>political</1><2/><3/><4/><5/>
</type>
<phone></phone>
<rating></rating>
<icon>http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png</icon>
<website></website>
<longitude>-105.2551187</longitude>
<latitude>54.5259614</latitude>
</location>
</locations>
Relevant Part of my Implementation
- (void)viewDidLoad
{
[super viewDidLoad];
...
if(!self.distance){self.distance = #"250000";}
NSString *string = [NSString stringWithFormat:#"http://fishbe.in/lab/reserverr/api/?term=%#&lat=%f&long=%f&limit=100&distance=%#", self.searchterm, location.coordinate.latitude, location.coordinate.longitude, self.distance];
NSLog(#"%#", string);
NSURL *URL = [NSURL URLWithString:string];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
self.element = elementName;
if ([self.element isEqualToString:#"locations"]) {
self.items = [[NSMutableArray alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(#"HI"); //Not outputted
if ([self.element isEqualToString:#"name"]) {
self.result = [[ReserverrSearchResult alloc] init];
[self.result setTitle:string];
NSLog(#"%#", string);
} else if ([self.element isEqualToString:#"address"]) {
[self.result setVicinity:string];
NSLog(#"%#", string);
} else if ([self.element isEqualToString:#"gid"]) {
[self.result setGid:string];
NSLog(#"%#", string);
} else if ([self.element isEqualToString:#"latitude"]) {
[self.result setLatitude:[string floatValue]];
NSLog(#"%#", string);
} else if ([self.element isEqualToString:#"longitude"]) {
[self.result setLongitude:[string floatValue]];
NSLog(#"%#", string);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:#"location"]) {
[self.items addObject:self.result];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self addAnnotations];
}
Edit - Added
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
NSLog(#"%#",parseError);
}
and got nothing.
There are a couple of issues:
As wain points out, you should implement parser:parseErrorOccurred: and it will tell you what's wrong.
I'd expect problems if the searchterm contains any characters that are reserved characters for a URL (e.g. a space, a plus sign, an ampersand, etc.). You should always percent-escape what I presume is a user provided search term and adding it to a URL:
NSString *string = [NSString stringWithFormat:#"http://fishbe.in/lab/reserverr/api/?term=%#&lat=%f&long=%f&limit=100&distance=%#", [self percentEscapeString:self.searchterm], location.coordinate.latitude, location.coordinate.longitude, self.distance];
where you can use a method like the following:
- (NSString *)percentEscapeString:(NSString *)string
{
NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
(CFStringRef)#" ",
(CFStringRef)#":/?#!$&'()*+,;=",
kCFStringEncodingUTF8));
return [result stringByReplacingOccurrencesOfString:#" " withString:#"+"];
}
Note, do not rely upon stringByAddingPercentEscapesUsingEncoding to do the percent-escaping. You really want to use CFURLCreateStringByAddingPercentEscapes, like above.
As an aside, your XML is not well-formed. I don't believe that NSXMLParser will accept element names that are numbers. So, instead of:
<type>
<1>political</1><2/><3/><4/><5/>
</type>
You might want:
<types>
<type>political</type>
<type></type>
<type></type>
<type></type>
<type></type>
</types>
Or, if you really need those numeric identifiers:
<types>
<type id="1">political</type>
<type id="2"></type>
<type id="3"></type>
<type id="4"></type>
<type id="5"></type>
</types>
In this latter example, your didStartElement can then use the attributeDict to extract the id identifier.
You report that parseErrorOccurred did not return anything. That means your server probably didn't return anything. And this could be caused by any of a number of problems. Try using your URL and return the data (for example, into a NSString or NSData, rather than the parser) and see what the response looked like. E.g., for testing purposes you could do:
NSError *error;
NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];
NSString *results = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// confirm error is `nil` and `results` is well-formed XML;
// you can then pass the `data` to `NSXMLParser` with `initWithData` if you want
I bet it's empty (which for certain search terms could be caused by a lack of percent-escaping, or from any of a myriad of server problems).
It might not be a problem, but it's worth noting that it's conceptually risky to save the results in foundCharacters, because sometimes between didStartElement and didEndElement, you'll have multiple calls to foundCharacters to retrieve the data. Generally people will instantiate a NSMutableString in didStartElement, append to it in foundCharacters, and then save it in didEndElement.
I got an iOS app. All data stores in xml files.
<?xml version="1.0" encoding="utf-8"?>
<objects>
<object
name="Скульптура Р. Исмагилова «Пермяк – соленые уши»"
xcoord="58.00998487478568"
ycoord="56.239829063415527"
type=""
description=""
external_name="gl1" />
</objects>
So, i want to parse this XML file to NSMutableArray
I do it with NSXMLParser deleagate class. This is class's code:
#implementation XMLParser
#synthesize aPLace;
- (XMLParser *) initXMLParser {
[super init];
appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
NSLog(#"parsing");
if([elementName isEqualToString:#"objects"]) {
//Initialize the array.
appDelegate.books = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:#"object"]) {
//Initialize the book.
aPLace = [[Place alloc] init];
//Extract the attribute here.
aPLace.name = [[attributeDict objectForKey:#"name"] string];
NSLog(#"Reading name :%#", aPLace.name);
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:#"objects"])
return;
if([elementName isEqualToString:#"object"]) {
[appDelegate.greenLine addObject:aPLace];
}
}
#end
You can see that there is NSLog(#"parsing"); in didStartElement function. But output is empty.
So, i implement parsing in AppDelegateClass's function applicationDidFinishLaunching
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSURL *url = [[NSURL alloc] initWithString:#"greenline_ru.xml"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];
//Set delegate
[xmlParser setDelegate:parser];
//Start parsing the XML file.
BOOL success = [xmlParser parse];
if(success)
NSLog(#"No Errors");
else
NSLog(#"Error Error Error!!!");
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
and every time output is Error Error Error!!! why? What's the problem?
NSURL *url = [[NSURL alloc] initWithString:#"greenline_ru.xml"];
I think this is your problem. If you have file you should use something like
NSString *path = [[NSBundle mainBundle] pathForResource:#"greenline_ru"
ofType:#"xml"];
[[NSXMLParser alloc] initWithData:[NSData dataWithContentsOfFile:path]]
Use TBXML, this is quite easy to use...
Study this- http://www.tbxml.co.uk/TBXML/API.html