Objective c iPhone上的XML解析

Objective c iPhone上的XML解析,objective-c,xml-parsing,Objective C,Xml Parsing,我想为iPhone做一些简单的XML解析。主要是为了练习。我认为XML非常简单,我想学习如何将它与其他语言集成 我将此链接用于关于如何进行XML解析的教程,但就我的目的而言,它有点高级:/ 难道没有一种简单的方法不需要很多行代码来进行XML解析吗 致以最良好的祝愿 克里斯蒂安 编辑: 我能够通过以下方式实现我想要的: - (void)startParsing { NSData *xmlData = [[NSData alloc] initWithContentsOfURL:[NSURL

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

我将此链接用于关于如何进行XML解析的教程,但就我的目的而言,它有点高级:/

难道没有一种简单的方法不需要很多行代码来进行XML解析吗

致以最良好的祝愿

克里斯蒂安

编辑:

我能够通过以下方式实现我想要的:

- (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。。。从这里开始,我应该如何从每个元素中获取值呢?

虽然知道这一点很好,但实际上使用JSON可能会容易得多

进口 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

进口“cardetals.h” @实现细节

@合成地图名; @合成MapContentName; @综合地图宽度、地图高度

@结束

请看,这些是模型对象,您在其中全局存储ur值,您可以从这里使用这些值

现在我们使用三个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中,仅当找到第一个节点时,才分配模型类对象 2) 在foundCharacters中附加数据
3) 在didEndElement中,您将把foundCharacters中的数据分配给模型对象,我想您一定创建了这样一个模型类:

进口 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

进口“cardetals.h” @实现细节

@合成地图名; @合成MapContentName; @综合地图宽度、地图高度

@结束

请看,这些是模型对象,您在其中全局存储ur值,您可以从这里使用这些值

现在我们使用三个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中,仅当找到第一个节点时,才分配模型类对象 2) 在foundCharacters中附加数据
3) 在DiEndElement中,您将把数据从foundCharacters分配到model对象

说“XML真的很容易”的人通常分为两类:完全理解XML的人和认为完全理解XML的人。你属于哪一类?可能是最后一类……你应该先读苹果的。谢谢:)我会深入探讨:说“XML真的很容易”的人通常分为两类:完全理解XML的人和认为完全理解XML的人。你属于哪一个?可能是最后一个…你应该先读苹果的。谢谢:)我会深入研究:Di已经制作了一个JSON应用程序:)现在我想用XML做点什么;)如果您正在开发一个企业级应用程序,该应用程序使用的是您没有编写的XML,那么您可能需要了解这一点。否则,如果您创建的传输将相对简单,那么我将避免在iPhone上使用XML。它可能更强大,但解析/解包既麻烦又痛苦。但是,这是我想要学习的道具。我已经制作了一个JSON应用程序:)现在我想用XML做点什么;)如果您正在开发一个企业级应用程序,该应用程序使用的是您没有编写的XML,那么您可能需要了解这一点。否则,如果您创建的传输将相对简单,那么我将避免在iPhone上使用XML。它可能更强大,但解析/解包既麻烦又痛苦。但是,想要学习它的道具。