2
<?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
      <VideoListResponse xmlns="http://tempuri.org/">
        <VideoListResult>
          {"List":[{"GUID":"127381638172638173","PageNumber":[2,1]}]}
        </VideoListResult>
      </VideoListResponse>
    </soap:Body>
  </soap:Envelope>

This is my response xml string. How can I parse the PageNumber from this xml string?

0

2 Answers 2

7

This is a simple code fragment which you can use to expand

ViewController.h file

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <NSXMLParserDelegate>

@property(retain,nonatomic)NSString *videoListResult;

@property(retain,nonatomic)NSString *currentElement;

@end

ViewController.m file

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)viewDidAppear:(BOOL)animated{
    [self parseXML];
}

-(void)parseXML{
    NSString *xmlString = @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\
    <soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\
    <soap:Body>\
    <VideoListResponse xmlns=\"http://tempuri.org/\">\
    <VideoListResult>{\"List\":[{\"GUID\":\"127381638172638173\",\"PageNumber\":[2,1]}]}\
    </VideoListResult>\
    </VideoListResponse>\
    </soap:Body>\
    </soap:Envelope>";

    NSData *xmlData = [xmlString dataUsingEncoding:NSASCIIStringEncoding];

    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:xmlData];

    [xmlParser setDelegate:self];

    [xmlParser parse];

}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    NSLog(@"Element started %@",elementName);
    self.currentElement=elementName;

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    NSLog(@"Element ended %@",elementName);
    self.currentElement=@"";

}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if([self.currentElement isEqualToString:@"VideoListResult"]){
       // NSLog(@"The characters are %@",string);

        id data = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSASCIIStringEncoding] options:0 error:nil];


        NSLog(@"The page numbers are %@",[[[data valueForKey:@"List"] objectAtIndex:0] valueForKey:@"PageNumber"]);


    }
}

@end
Sign up to request clarification or add additional context in comments.

1 Comment

Hi, im trying to use your code and Im trying this but I get an Expected Expression error at the string xlmns line: -(void)parseXML{ NSString *xmlString = @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\ <string xmlns=\"http://server.com">\; NSData *xmlData = [xmlString dataUsingEncoding:NSASCIIStringEncoding]; NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:xmlData]; [xmlParser setDelegate:self]; [xmlParser parse]; }
1

You want to use LibXML to parse the XML, and then you want to use SBJSON to parse the JSON contained in the VideoListResult.

2 Comments

There's also NSXMLParser, NSXMLParserDelegate, & NSJSONSerialization. I would definitely prefer built-in classes to third-party libraries.
Unless you need to support iOS 4.X, Richard is mostly right. libXML is slightly better for XML parsing (in that you can just parse on the XPath, and grab the field you want), whereas if you use NSXMLParser, you have to mess around more of the document.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.