Анализ этого файла XML с помощью touchXML - PullRequest
0 голосов
/ 25 января 2012

У меня есть этот XML-файл:

<continents>
    <continent1 id="EUR" name="EUROPE"></continent1>
    <continent2 id="AME" name="AMERICA"></continent2>
</continents>

Я пытался сделать это с NSXMLParser, но я не могу показать результаты в то же время, я бы попробовал это с touchXML, кто-то может мне помочь?спасибо.

1 Ответ

1 голос
/ 25 января 2012

«Европа» и «Америка» являются атрибутами ваших тегов. Атрибуты, определенные как «имя» в теге. Вы действительно должны ознакомиться с NSXMLParser и методом, управляемым событиями, в котором он анализируется. По сути, вы создаете подкласс NSObject, который будет делегатом NSXMLParser, и, когда он встречает элементы, он вызывает методы делегата для вашего пользовательского объекта. И этот очень простой XML - прекрасный пример для изучения. Например.

Этот код использует ARC.

SimpleExampleParse.h:

@interface SimpleExampleParse : NSObject <NSXMLParserDelegate>
@property (strong, nonatomic) NSMutableArray *continents;
-(id)initWithString:(NSString *)stringToParse;
@end

SimpleExampleParse.m:

#import "SimpleExampleParse.h"
@implementation SimpleExampleParse{
    NSXMLParser *myParser;
}
@synthesize continents;
-(id)initWithString:(NSString *)stringToParse{
    if ((self = [super init])){
        myParser = [[NSXMLParser alloc] initWithData:[stringToParse dataUsingEncoding:NSUTF8StringEncoding]];
        myParser.delegate = self;
        self.continents = [[NSMutableArray alloc] init];
        [myParser parse];
    }
    return self;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    // Check to see if this element has an attribute "name".
    NSString *name = [attributeDict objectForKey:@"name"];
    // If name is not nil add it to our Array
    if (name) [continents addObject:name];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    // We don't care your XML contains no content
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    // We don't care your XML contains no content
}
@end

Этот класс используется так:

NSString *stringToParse = @"<continents><continent1 id=\"EUR\" name=\"EUROPE\"></continent1><continent2 id=\"AME\" name=\"AMERICA\"></continent2></continents>";
SimpleExampleParse *parser = [[SimpleExampleParse alloc] initWithString:stringToParse];
NSLog(@"contenents %@",parser.continents);

Вывод из журнала будет:

contenents (
    EUROPE,
    AMERICA
)

Пожалуйста, Теперь, когда перед вами что-то работает, найдите время, чтобы изучить его и изучить, как оно работает.

...