2012-07-17 37 views
0

嘿,任何人都可以請幫助我Out.I新xcode(目標c)即時通訊使用asp.net web服務和簡單​​即時通訊返回3文件名稱從該服務到我的xcode project.now我想要做的是將XML中產生的Web服務數據解析爲xcode中的簡單字符串。如何解析asp.net webservice在目標c中返回的xml字符串?

我的XML字符串是

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <string>Desert.jpg</string> 
    <string>Koala.jpg</string> 
    <string>Tulips.jpg</string> 
</ArrayOfString> 

我在馬xcode項目四類文件的情況如下

imagesavetestviewcontroller.m文件

// 
// ImageSaveTestViewController.m 
// ImageSaveTest 
// 
// Created by Kiichi Takeuchi on 4/4/10. 
// Copyright ObjectGraph LLC 2010. All rights reserved. 
// 

#import "ImageSaveTestViewController.h" 

@implementation ImageSaveTestViewController 


- (void)viewDidLoad { 
    [super viewDidLoad]; 





    NSString *urlString = @"http://192.168.3.106/local_storage/Webservice1.asmx/HelloWorld"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod: @"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 

    NSError *errorReturned = nil; 
    NSURLResponse *theResponse =[[NSURLResponse alloc]init]; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned]; 


    if (errorReturned) 
    { 
     //...handle the error 
    } 



     NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     **NSLog(@"%@", retVal);** 
//this is the retval which i want to convert in simple string.its containig that above xml file 

     //...do something with the returned value   




    NSLog(@"Downloading..."); 
    // Get an image from the URL below 

    id path = @"http://192.168.3.106/chmall/images/1.jpg"; 
    NSURL *url1 = [NSURL URLWithString:path]; 
    NSData *data11=[NSData dataWithContentsOfURL:url1]; 
    UIImage *img1=[[UIImage alloc] initWithData:data11];  

    //UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"192.168.3.106/chmall/images/1.jpg"]]]; 

    NSLog(@"%f,%f",img1.size.width,img1.size.height); 

    // Let's save the file into Document folder. 
    // You can also change this to your desktop for testing. (e.g. /Users/kiichi/Desktop/) 
    NSString *docDir = @"/Users/niketkapadia/Desktop"; 

    //NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    // If you go to the folder below, you will find those pictures 
    NSLog(@"%@",docDir); 

    NSLog(@"saving png"); 
    NSString *pngFilePath = [NSString stringWithFormat:@"%@/test.png",docDir]; 
    NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(img1)]; 
    [data1 writeToFile:pngFilePath atomically:YES]; 

    NSLog(@"saving jpeg"); 
    NSString *jpegFilePath = [NSString stringWithFormat:@"%@/test.jpeg",docDir]; 
    NSData *data2 = [NSData dataWithData:UIImageJPEGRepresentation(img1, 1.0f)];//1.0f = 100% quality 
    [data2 writeToFile:jpegFilePath atomically:YES]; 

    NSLog(@"saving image done"); 

    [img1 release]; 
} 

@end 

appdeleget.m文件

// ImageSaveTestAppDelegate.m 
// ImageSaveTest 
// 
// Created by Kiichi Takeuchi on 4/4/10. 
// Copyright ObjectGraph LLC 2010. All rights reserved. 
// 

#import "ImageSaveTestAppDelegate.h" 
#import "ImageSaveTestViewController.h" 

@implementation ImageSaveTestAppDelegate 

@synthesize window; 
@synthesize viewController; 


- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch  
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 
} 


- (void)dealloc { 
    [viewController release]; 
    [window release]; 
    [super dealloc]; 
} 


@end 

delagte.h文件

// 
// ImageSaveTestAppDelegate.h 
// ImageSaveTest 
// 
// Created by Kiichi Takeuchi on 4/4/10. 
// Copyright ObjectGraph LLC 2010. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@class ImageSaveTestViewController; 

@interface ImageSaveTestAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    ImageSaveTestViewController *viewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet ImageSaveTestViewController *viewController; 

@end 

viewcontroller.h

// 
// ImageSaveTestViewController.h 
// ImageSaveTest 
// 
// Created by Kiichi Takeuchi on 4/4/10. 
// Copyright ObjectGraph LLC 2010. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface ImageSaveTestViewController : UIViewController { 

} 

@end 

回答

1

SudzC能夠從WSDL文件生成目標C代碼。這是一個在線服務,因此您可以上傳或鏈接您的WSDL文件,並且您可以獲得帶有可運行代碼的zip文件,以便與您的Web服務進行通信。

還有lots of questions標籤爲「sudzc」。


你也可以使用NSXMLParser讀取XML:

(Demo)

#import <Cocoa/Cocoa.h> 

@interface AOSParser : NSObject { 
    NSMutableString *capturedCharacters; 
    BOOL captureCharacters; 

    NSString *text; 
    NSMutableArray *items; 
} 

- (NSMutableArray *)parseXMLData:(NSData *)data parseError:(NSError **)error; 

// NSXMLParserDelegate methods (NSXMLParser doesn't need an explicit protocol implementation) 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict; 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string; 
@end 

@implementation AOSParser 

- (NSMutableArray *)parseXMLData:(NSData *)data parseError:(NSError **)error { 
    items = [NSMutableArray array]; 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; 
    [parser setDelegate:self]; 
    [parser setShouldProcessNamespaces:NO]; 
    [parser setShouldReportNamespacePrefixes:NO]; 
    [parser setShouldResolveExternalEntities:NO]; 

    [parser parse]; 

    if (error && [parser parserError]) { 
     *error = [parser parserError]; 
    } 

    //[parser release]; // Seems to be auto-released 

    return [items retain]; 
} 

// Called when a start-tag is found 
- (void)parser:(NSXMLParser *)parser 
     didStartElement:(NSString *)elementName 
     namespaceURI:(NSString *)namespaceURI 
     qualifiedName:(NSString *)qualifiedName 
     attributes:(NSDictionary *)attributeDict { 

    //NSLog(@"<%@>", elementName); 

    if ([elementName isEqual:@"string"]) { 
     captureCharacters = YES; 
     capturedCharacters = [NSMutableString string]; 
    } 

} 

// Called when plain text is found 
- (void)parser:(NSXMLParser *)parser 
     foundCharacters:(NSString *)string { 

    //NSLog(@"Text: %@", string); 

    if (captureCharacters) { 
     [capturedCharacters appendString:string]; 
    } 
} 

// Called when an end tag is found 
- (void)parser:(NSXMLParser *)parser 
     didEndElement:(NSString *)elementName 
     namespaceURI:(NSString *)namespaceURI 
     qualifiedName:(NSString *)qName { 

    //NSLog(@"</%@>", elementName); 

    if (captureCharacters) { 
     captureCharacters = NO; 
     text = [NSString stringWithString:capturedCharacters]; 
     [capturedCharacters release]; 
    } 

    if ([elementName isEqual:@"string"]) { 
     [items addObject:text]; 
    } 
} 

int main() 
{ 
    NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init]; 

    // Load the XML into a NSData 
    NSString *xmlString = @"<?xml version=\"1.0\" encoding=\"utf-8\"?><ArrayOfString xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://tempuri.org/\"><string>Desert.jpg</string><string>Koala.jpg</string><string>Tulips.jpg</string></ArrayOfString>"; 
    NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding]; 

    AOSParser *parser = [[AOSParser alloc] init]; 

    NSError *error = nil; 
    NSMutableArray *items = [parser parseXMLData:xmlData parseError:&error]; 

    if (error) { 
     NSLog(@"Error: %@", [error localizedDescription]); 
    } 
    else { 
     NSLog(@"Items: %@", items); 
    } 

    [parser release]; 
    [items release]; 

    [myPool drain]; 
    return 0; 
} 
@end 

輸出:

Items: (Desert.jpg, Koala.jpg, Tulips.jpg)

我的第一個Objective C程序,曾經。

+0

我試過了,但它不工作 – 2012-07-17 12:35:04

+0

@BhavikKama看到我更新的答案。 (SAX解析非常冗長) – 2012-07-17 16:52:33