0

我是 iphone 开发的新手,我想要的是一个可以绑定到对象的 xml 解析器。我搜索了很多,但我仍然需要一些帮助。例如,我有以下 xml 结构:

<xml>
  <hotels>
    <hotel>
      <id>1</id>
      <name>Hotel Name</name>
    </hotel>
    <hotel>
       ....
    </hotel>
  </hotels>
  <beaches>
    <beach>
      <id>11</id>
      <name>Beach Name</name>
    </beach>
    <beach>
       ....
    </beach>
  </beaches>
</xml>

现在我的问题是......这是读取这个 xml 文件并解析的最好(或者可能更简单)的方法......:

  1. 现在我想要一个所有酒店的列表……所以我想要解析并得到那个列表……等等。
  2. 现在我想要 id = 11 等的海滩。

这可以在iphone中轻松完成吗?哪个是最好的方法?如果您能给我提供源代码等示例,我将不胜感激。提前致谢。

注意:我将至少支持 ios 4.3 或更高版本。

4

1 回答 1

1

您可以尝试实现 NSXMLParserDelegate 然后将您的逻辑写入

- (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

示例代码:-

创建 XMLParser 类,然后为 Hotel、Beach 和用于存储这些对象的数组创建 bean 类。

XMLParser.h

#import <Foundation/Foundation.h>

@interface XMLParser : NSObject <NSXMLParserDelegate>

@property (strong, readonly) NSMutableArray *yourObjects;

-(id) parseXML:(NSString *)url;

@end

XMLParser.m

#import "XMLParser.h"
#import "YourObject.h"
@implementation XMLParser

@synthesize yourObjects    =_yourObjects;

NSMutableString *currentNode;
NSXMLParser *parser;
YourObject *YourObject;

-(id) parseXML:(NSString *)url
{
       _yourObjects       = [[NSMutableArray alloc]init];
       NSURL *nsURL    = [NSURL URLWithString:url];
       NSData *data    = [[NSData alloc] initWithContentsOfURL:nsURL];
       parser          = [[NSXMLParser alloc] initWithData:data];
       parser.delegate = self;
       [parser parse];
       return self;
}

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

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

{
  if ([elementName isEqualToString:@"hotel"])
  {
    yourObject = [YourObject alloc]; //eg:- Hotel
    //any logic that you want to include.....
  }
  if ([elementName isEqualToString:@"beach"])
  {
    yourObject = [YourObject alloc]; //eg:- beach
    //any logic that you want to include.....
  }
}

@end

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

   if([elementName isEqualToString:@"status"])
   {
     [self.yourObjects addObject:yourObject];
     yourObject = nil;
     currentNode  = nil;
    }
}

调用 -(id) parseXML:(NSString *)url; 解析所需的 XML 并检索对象。

希望这可以帮助。

于 2012-05-01T14:45:00.337 回答