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 に答える