How to grab an XML element and store it? Objective C - ios

I am trying to grab a token from a website. Upon successful authentication, an XML document would be displayed.
I created a connection as shown below:
NSString *strURLQueryString = [NSString stringWithFormat:#"%#?username=%#&password=%#", kURL_LOGIN, nameString, passwordString];
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:strURLQueryString]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
In order to display the output, I used this:
unsigned char byteBuffer[[receivedData length]];
[receivedData getBytes:byteBuffer];
NSLog(#"Output: %s", (char *)byteBuffer);
So some of the output of the returned document is as shown below:
<status>0</status><reason>User fetched.</reason><token>9cb7396dccabe68c067521db219afb83</token>
I have read many XML parsing implementation but I just could not implement it as it does not fulfil my need, and I just could not understand the complexity of its explanation.
Would appreciate if anyone could give me a good advice on how to go about.

- (XMLParserViewController *) initXMLParser {
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:#"Books"]) {
appDelegate.books = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:#"Book"])
{
aBook = [[Books alloc] init];
}
NSLog(#"Processing Element: %#", elementName);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
[currentElementValue appendString:string];
NSLog(#"Processing Value: %#", currentElementValue);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:#"Books"])
return;
if([elementName isEqualToString:#"Book"])
{
[appDelegate.books addObject:aBook];
aBook = nil;
}
else if([elementName isEqualToString:#"name"])
{
aBook.name=currentElementValue;
}
else if([elementName isEqualToString:#"address"])
{
aBook.address=currentElementValue;
}
else if([elementName isEqualToString:#"country"])
{
aBook.country=currentElementValue;
}
currentElementValue = nil;
NSLog(#"%#",aBook.name);
NSLog(#"%#",aBook.address);
NSLog(#"%#",aBook.country);
}
Try this ,, I hope this works....

The relevant NSXMLParserDelegate methods:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName //etc
{ _inToken = [elementName isEqualToString:#"token"]; }
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName //etc
{ _inToken = NO; }
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (_inToken) {
_token = string;
[parser abortParsing];
}
}

You should use XML parser.
It is easy to use, go all below steps to get best result:
Create XMLParser class subclasses from NSXMLParser, so you have a NSXMLParser.h and NSXMLParser.m class
your .h class must be like this:
#import <Foundation/Foundation.h>
#interface XMLParser : NSXMLParser <NSXMLParserDelegate>{
NSUInteger parsedCounter;
BOOL accumulatingParsedCharacterData;
BOOL didAbortParsing;
}
#property (nonatomic, strong) NSMutableString *currentParsedCharacterData;
#property (nonatomic, strong) NSMutableArray *currentParsedCharacterArray;
#end
And .m class :
#import "XMLParser.h"
#implementation XMLParser
#pragma mark Parser constants
// Limit the number of parsed data to 100.
static const NSUInteger kMaximumNumberOfFilesToParse = 100;
static NSUInteger const kSizeOfFileBatch = 10;
// Reduce potential parsing errors by using string constants declared in a single place.
static NSString * const kEntryElementName = #"dlResult";
static NSString * const kStringElementName = #"string";
#pragma mark NSXMLParser delegate methods
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
// NSLog(#"didStart");
// If the number of parsed earthquakes is greater than kMaximumNumberOfEarthquakesToParse, abort the parse.
if (parsedCounter >= kMaximumNumberOfFilesToParse) {
// Use the flag didAbortParsing to distinguish between this deliberate stop and other parser errors.
didAbortParsing = YES;
[self abortParsing];
}
if ([elementName isEqualToString:kEntryElementName]) {
_currentParsedCharacterArray = [[NSMutableArray alloc]init];
} else if ([elementName isEqualToString:kStringElementName]) {
accumulatingParsedCharacterData = YES;
_currentParsedCharacterData = [[NSMutableString alloc]init];
}
}
// return string between tags
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// NSLog(#"foundCh");
if (accumulatingParsedCharacterData) {
// If the current element is one whose content we care about, append 'string'
// to the property that holds the content of the current element.
[_currentParsedCharacterData appendString:string];
NSLog(#"currentParsedCharacterData:%#",_currentParsedCharacterData);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
// NSLog(#"didEnd");
if ([elementName isEqualToString:kStringElementName]) {
[_currentParsedCharacterArray addObject:_currentParsedCharacterData];
}
accumulatingParsedCharacterData = NO;
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
if (didAbortParsing == NO) {
// Pass the error to the main thread for handling.
[self performSelectorOnMainThread:#selector(handleError:) withObject:parseError waitUntilDone:NO];
}
}
#end
In .m class there are two const string:
static NSString * const kEntryElementName = #"dlResult";
static NSString * const kStringElementName = #"string";
those are string tags,the tags that you should implement are "status", "reason" "token"
from connection class, send data connection to XMLParser class like below:
#autoreleasepool {
// It's also possible to have NSXMLParser download the data, by passing it a URL, but this is not desirable
// because it gives less control over the network, particularly in responding to connection errors.
//
XMLParser *parser = [[XMLParser alloc] initWithData:data];
parser.currentParsedCharacterArray = [NSMutableArray array];
parser.currentParsedCharacterData = [NSMutableString string];
[parser setDelegate:parser];
[parser parse];
// depending on the total number of earthquakes parsed, the last batch might not have been a "full" batch, and thus
// not been part of the regular batch transfer. So, we check the count of the array and, if necessary, send it to the main thread.
if ([parser.currentParsedCharacterArray count] > 0) {
// send parsed data to another class or ...
// parser.currentParsedCharacterArray is parsed data
}
parser.currentParsedCharacterArray = nil;
parser.currentParsedCharacterData = nil;
}
if you have any question, ask me!

Related

Web Service - Getting data in Xcode

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.

Parse XML response in IOS

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;
}

NSXMLParser not finding closing tag

Im trying to fetch list of content from xml web source . Im using NSXMLParser atm.
here is the code :
- (void)main
{
self.workingArray = [NSMutableArray array];
self.workingPropertyString = [NSMutableString string];
NSURL *url = [[NSURL alloc]initWithString:#"http://myxmlwebsite.xml"];
NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
[parser setDelegate:self];
bool result = [parser parse];
NSLog(#"result is ok for xml parse : %#", result ? #"Yes" : #"No");
if (![self isCancelled])
{
self.appRecordList = [NSArray arrayWithArray:self.workingArray];
SubCategoryViewController *subCategoryViewController;
subCategoryViewController.entries = self.appRecordList;
[subCategoryViewController.tableView reloadData];
}
self.workingArray = nil;
self.workingPropertyString = nil;
self.dataToParse = nil;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:kUser])
{
self.workingEntry = [[UserFetchAppRecord alloc] init];
}
_elementsToParse = [[NSArray alloc] initWithObjects:
kid,ktitle, nil];
self.storingCharacterData = [_elementsToParse containsObject:elementName];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if (self.workingEntry)
{
if (self.storingCharacterData)
{
NSString *trimmedString = [self.workingPropertyString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[self.workingPropertyString setString:#""];
if ([elementName isEqualToString:kid])
{
self.workingEntry.ids = trimmedString;
NSLog(#"id : %#" , trimmedString);
}
else if ([elementName isEqualToString:ktitle])
{
self.workingEntry.title = trimmedString;
NSLog(#"ktitle : %#" , trimmedString);
}
}
else if ([elementName isEqualToString:kUser])
{
NSLog(#"inside elementName isEqualToString:kUser");
[self.workingArray addObject:self.workingEntry];
NSUInteger self_workingArrayCount = [self.workingArray count];
self.workingEntry = nil;
}
}
}
Now at console if i run program i get these results :
"result is ok for xml parse = true"
"id : 1"
"ktitle : usertitle"
.
.
.
but the result of closing tab no showing in console, this one "inside elementName isEqualToString:kUser".
hows that possible ?
the tag of my xml are like this :
<Main>
<user>
<id></id>
<title></title>
</user>
<user>
<id></id>
<title></title>
</user>
.....
</Main>
Change else if ([elementName isEqualToString:kUser]) in
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
to if ([elementName isEqualToString:kUser]).
self.storingCharacterData become YES when element id or title starts. So when element user ends self.storingCharacterData will be YES, and else if ([elementName isEqualToString:kUser]) wont work.

How to parse SOAP xml response in iPhone programming

I am unable to parse soap response,I have tried many ways but not solved my problem,I need the value of USERNAME and PASSWORD.
I am getting following response after soap request :
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AuthenticateResponse xmlns="http://tempuri.org/">
<AuthenticateResult>
<DocumentElement>
<Status>
<USERNAME>True</USERNAME>
<PASSWORD>true</PASSWORD>
</Status>
</DocumentElement>
</AuthenticateResult>
</AuthenticateResponse>
</soap:Body>
</soap:Envelope>
Here is my code :
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName attributes: (NSDictionary *)attributeDict
{
if ( [elementName isEqualToString:#"AuthenticateResponse"]||[elementName
isEqualToString:#"AuthenticateResult"] || [elementName isEqualToString:#"DocumentElement"])
{
statusArray = [[NSMutableArray alloc] init];
}
else if ([elementName isEqualToString:#"Status"])
{
authenticate = [[Authenticate alloc] init];
}
else if ([elementName isEqualToString:#"USERNAME"])
{
currentElementValue = [[NSMutableString alloc] init];
}
else if ([elementName isEqualToString:#"PASSWORD"])
{
currentElementValue = [[NSMutableString alloc] init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (currentElementValue)
{
[currentElementValue appendString:string];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if( [elementName isEqualToString:#"USERNAME"])
{
authenticate.userName = currentElementValue;
}
else if ([elementName isEqualToString:#"PASSWORD"])
{
authenticate.strAuthenticate = currentElementValue;
}
else if ([elementName isEqualToString:#"Status"]) {
[statusArray addObject:authenticate];
}
}
How can i get the values of username and password,can someone help me to parse this.
Thanks in advance.
Try this:
Add 2 properties to your class.
#property (nonatomic, strong) NSString *elementValue;
#property (nonatomic, strong) NSMutableArray *authenticationValues;
Replace your current implementation by:
- (void)parseXML:(NSData *)xmlData {
self.authenticationValues = [NSMutableArray array];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
parser.delegate = self;
[parser parse];
NSLog(#"Authentication values: %#", self.authenticationValues);
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// Keep track of the current element value
self.elementValue = string;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// If the element was 'username' or 'password', add the value to the authenticationValues array
if ([elementName isEqualToString:#"USERNAME"] ||
[elementName isEqualToString:#"PASSWORD"]) {
[self.authenticationValues addObject:self.elementValue];
}
}
To parse the file perform the method parseXML:
When running this you should see the following output on the console:
Authentication values: (
True,
true
)
which are the values for USERNAME and PASSWORD.
Please see the demo prepared for iOS/OSX using sample web service.
It uses swift - SOAP request creator & response parser.
[DEMO][1]
Done using Alamofire & SWXMLHash library
Thanks

NSXMLParser strange behavior with \n

I'm developing an iOS 4 application that parses a XML file. A piece of XML is:
<?xml version="1.0" encoding="utf-8" ?>
<cards>
<card id ="0">
<name lang="es">The Mad</name>
<description lang="es">...</description>
</card>
...
</cards>
I use the following method to parse <name lang="es">The Mad</name>.
#pragma mark -
#pragma mark NSXMLParserDelegate methods
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
NSLog(#"DidStartElement: %#", elementName);
if ([elementName isEqualToString:#"card"])
{
currentCard = [[Card alloc] init];
NSString* arcaneNumber = [attributeDict objectForKey:#"id"];
currentCard.Number = arcaneNumber;
return;
}
if ([elementName isEqualToString:#"name"])
{
if ([[attributeDict objectForKey:#"lang"] isEqualToString:userLanguage])
{
currentProperty = kNameProperty;
return;
}
}
if ([elementName isEqualToString:#"description"])
{
if ([[attributeDict objectForKey:#"lang"] isEqualToString:userLanguage])
{
currentProperty = kDescriptionProperty;
return;
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (!currentStringValue)
{
// currentStringValue is an NSMutableString instance variable
currentStringValue = [[NSMutableString alloc] initWithCapacity:50];
}
[currentStringValue appendString:string];
}
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
NSLog(#"DidEndElement: %#", elementName);
if ([elementName isEqualToString:#"card"])
{
[cards setObject:currentCard forKey:currentCard.Number];
[currentCard release];
currentCard = nil;
return;
}
if (currentProperty == kNameProperty)
{
currentProperty = kNoneProperty;
currentCard.Name = [currentStringValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[currentStringValue release];
currentStringValue = nil;
return;
}
if (currentProperty == kDescriptionProperty)
{
currentProperty = kNoneProperty;
currentCard.Description = currentStringValue;
[currentStringValue release];
currentStringValue = nil;
return;
}
}
After, parsing , I get on currentStringValue the following:
\n\nThe Mad
How can avoid these two '\n'? Why am I getting these two '\n'?
This xml file came from a Windows system, and I've used TextWrangler to covert it to Classic Mac format.
The foundCharacters delegate method also gets called for whitespace in between elements. It will get called if there is say a newline between <cards> and <card id=....
I suggest clearing currentStringValue at the top of didStartElement to discard any characters found before the start of the current element and to make sure only the characters inside the current element (not between) are captured by foundCharacters.
At the top of didStartElement, add:
[currentStringValue release];
currentStringValue = nil;
It is possible for an element's value to contain whitespace (so removing them in didEndElement could result in saving values that don't match the xml content).
On your end element method you can try stripping these out yourself from the current text string. Simply try searching for them on the string and replace them with #"". I like replacing these and unwanted blank entries.
Try this it work for me ,
NSString *data= [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Use above line of code in foundCharacters method .
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
{
NSString *data= [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if(dString == nil){
dString = [[NSMutableString alloc] initWithString:data];
}else
{
[dString appendString:data];
}
}
Hope this will help for some one .

Resources