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
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.
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.
I want to parse this XML:
<?xml version="1.0" encoding="UTF-8"?>
<eventdata>
<rev></rev>
<event>
<id> </id>
<name></name>
<thumb> </thumb>
<eimage></eimage>
<artists></artists>
<date></date>
<time> </time>
<cost> </cost>
<discount> </discount>
<gmap> </gmap>
<web> </web>
<desc> </desc>
<file>
<src> </src>
<size> </size>
</file>
<vtype></vtype>
<address></address>
<area></area>
<city></city>
<pcode></pcode>
<lmark></lmark>
<likes></likes>
<hl></hl>
<pref></pref>
<img> <src> </src>
<size> </size></img>
<vid> <src> </src>
<size> </size></vid>
</event>
<event>
<id> </id>
<name></name>
<thumb> </thumb>
<eimage></eimage>
<artists></artists>
<date></date>
<time> </time>
<cost> </cost>
<discount> </discount>
<gmap> </gmap>
<web> </web>
<desc> </desc>
<file>
<src> </src>
<size> </size>
</file>
<vtype></vtype>
<address></address>
<area></area>
<city></city>
<pcode></pcode>
<lmark></lmark>
<likes></likes>
<hl></hl>
<pref></pref>
<img> <src> </src>
<size> </size></img>
<vid> <src> </src>
<size> </size></vid>
</event>
</eventdata>
I tried this code:
- (void)viewDidLoad
{
[super viewDidLoad];
_currentParsedCharacterData = [[NSMutableString alloc] init];
NSString *path = [[NSBundle mainBundle] pathForResource:#"NewYearPartyData" ofType:#"xml"];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
// parsing...
BOOL success = [parser parse];
// test the result
if (success) {
//NSLog(#"No errors - user count : %i", [parser [users count]]);
NSLog(#"Success");
// get array of users here
// NSMutableArray *users = [parser users];
} else {
NSLog(#"Error parsing document!");
}
}
#pragma mark - NSXMLParser delegate methods
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:#"event"]) {
NSLog(#"user element found – create a new instance of User class...");
//user = [[User alloc] init];
//We do not have any attributes in the user elements, but if
// you do, you can extract them here:
// user.att = [[attributeDict objectForKey:#"<att name>"] ...];
NSLog(#"Event Name = %#", [attributeDict objectForKey:#"name"]);
NSLog(#"attributeDict = %#", attributeDict);
}
if ([elementName isEqualToString:#"name"]) {
NSLog(#"attributeDict = %#", attributeDict);
NSLog(#"Event Name = %#", [attributeDict objectForKey:#"name"]);
NSLog(#"elementName = %#", elementName);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(#"didEndElement");
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(#"value of element %#", string);
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
}
Someone who is good in NSXMLParser - I request them to explain to me the flow.
My basic question is "How to access data of event i.e., id, name, thumb etc?"
NSXMLParsing is the easiest way to parse data. You can easily access data of event i.e., id, name, thumb etc using the delegate method
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
}
You can create a NSOBject class named Event.
Here is my code
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementname isEqualToString:#"id"])
{
event.id = currentNodeContentChapters;
}
if ([elementname isEqualToString:#"name"])
{
event.name = currentNodeContentChapters;
}
if ([elementname isEqualToString:#"thumb"])
{
event.thumb = currentNodeContentChapters;
}
if ([elementname isEqualToString:#"eiimage"])
{
event.eiimageUrl = currentNodeContentChapters;
}
-------------------
---------------
}
Hopefully it will work for you .
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!
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 .