2010-12-06 82 views
1

我想为iPhone做一些简单的XML解析。主要是为了练习。我认为XML非常简单,我想学习如何将它与其他语言集成。在iPhone上解析XML

我用这个链接,就怎么做XML解析的教程,但它是一点点进步了我的目的:/

是不存在的,不需要多行代码的简单方法做XML解析?

http://webcache.googleusercontent.com/search?q=cache:4S0UStrJP28J:gigaom.com/apple/tutorial-build-a-simple-rss-reader-for-iphone/+xml+parser+iphone&cd=3&hl=en&ct=clnk&client=safari

最好的问候!

克里斯蒂安

编辑:

我能够实现我想这一点:

- (void)startParsing { 
    NSData *xmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.vegvesen.no/trafikk/xml/savedsearch.xml?id=604"]]; 
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease]; 
    [parser setDelegate:self]; 
    [parser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    NSLog(@"Started %@", elementName); 
} 

这将只打印出的ElementName ......我应该怎么走就从这里开始从每个元素获取价值?

+4

说“XML非常简单”的人通常分为两类:完全理解XML的人,以及认为他们完全理解XML的人。你属于哪一个? – 2010-12-06 19:36:38

+0

可能是最后一个...... – 2010-12-06 19:42:40

回答

1

虽然这是很好的认识,在实践中则可能是JSON

0

一个更容易的时间我想你必须做出一个模型类是这样的:

进口

CarDetails.h

@interface CarDetails : NSObject 
{ 
    NSString *MapName; 
    NSString *MapContentName; 
    NSString *MapWidth; 
    NSString *MapHeight; 
} 

@property(retain,nonatomic)NSString *MapName; 
@property(retain,nonatomic)NSString *MapContentName; 
@property(retain,nonatomic)NSString *MapWidth; 
@property(retain,nonatomic)NSString *MapHeight; 

CarDetails.m

进口“CarDetai ls.h“

@implementation CarDetails

@synthesize MapName; @synthesize MapContentName; @synthesize MapWidth,MapHeight;

@end

看到这些是其中u全球存储乌尔值模型对象,你可以从这里使用的值

现在我们使用三种XML解析器代表

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"car"]){ 
    carDetails =[[carDetails alloc]init]; 
} 

} 


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

if([elementName isEqualToString:@"title"]){ 
    car.mapName=nodecontent; 
} 
else if([elementName isEqualToString:@"link"]){ 
    car.MapContenName=nodecontent; 
} 

//finally when we reaches the end of tag i am adding data inside the NSMutableArray 
if([elementName isEqualToString:@"item"]){ 

    [rssOutputData addObject:car]; // adding the model class object to the array and then use this array to retrieve the values 
    [car release]; 
    car = nil; 
} 
//release the data from mutable string variable 
[nodecontent release]; 

//reallocate the memory to get new content data from file 
nodecontent=[[NSMutableString alloc]init]; 

} 
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

1)在didStart中,只有在foundCharacters中找到第一个节点 2)时,才会分配模型类对象3)在didEndElement中,您将从foundCharacters中将数据分配给mo del object