Objective - C 학습 의 해석 XML

2014 - 10 - 16 기:
열성 적 인 네티즌 의 지적 을 통 해 본 고 는 어느 정도 문제 가 존재 하 므 로, 먼저 나 자신 에 게 일 깨 워 주 고, 시간 이 있 을 때 조정 하여 고 쳐 라.
문제 가 있 으 면 여러분 도 적극적으로 지적 해 주 십시오. 감사합니다.
본 고 는 로 컬 XML 을 분석 하 는 것 을 예 로 들 면 네트워크 에서 얻 은 반환 값 은 NSData 형 으로 만 바 뀌 어야 하 며 해석 은 동일 하 다.
분석 할 xml 파일 은 다음 과 같 습 니 다. users. xml
<?xml version="1.0" encoding="UTF-8"?>
<AllUsers>
    <message>    </message>
    <user>
        <name>     </name>
        <age>10</age>
        <school>JiangSu University</school>
    </user>
    <user>
        <name>  </name>
        <age>22</age>
        <school>NanJing University</school>
    </user>
    <user>
        <name>  </name>
        <age>23</age>
        <school>HongKong University</school>
    </user>
</AllUsers>

우 리 는 하나의 배열 로 저장 합 니 다. 최종 데이터 구 조 는?
(
        {
        message = "    ";
    },
        {
        age = 10;
        name = "     ";
        school = "JiangSu University";
    },
        {
        age = 22;
        name = "  ";
        school = "NanJing University";
    },
        {
        age = 23;
        name = "  ";
        school = "HongKong University";
    }
)

해석 절차 
1. NSXMLPArserDelegate 성명 대리
해석
//     message user         
    NSArray *keyElements = [[NSArray alloc] initWithObjects:@"message",@"user", nil];
    //        
    NSArray *rootElements = [[NSArray alloc] initWithObjects:@"message",@"name",@"age",@"school", nil];
    //   xml     
    NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
    //    Data
    NSData *data = [[NSData alloc] initWithContentsOfFile:xmlPath];
    
    //    
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
    
    //   
    xmlParser.delegate = self;
    //     
    BOOL flag = [xmlParser parse];
    if (flag) {
        NSLog(@"    ");
    }
    else{
        NSLog(@"    ");
    }

중간 변수, m 인터페이스 에서 정의
NSString *currentElement;
    
    NSString *currentValue;
    
    NSMutableDictionary *rootDic;
    
    NSMutableArray *finalArray;

에이전트 방법
#pragma - mark      
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
    //           
    finalArray = [[NSMutableArray alloc] init];
    
    
}
#pragma - mark      
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    for(NSString *key in self.keyElements){
        if ([elementName isEqualToString:key]) {
            //        ,           
            rootDic = nil;
            
            rootDic = [[NSMutableDictionary alloc] initWithCapacity:0];
            
        }
        else {
            for(NSString *element in self.rootElements){
                if ([element isEqualToString:element]) {
                    currentElement = elementName;
                    currentValue = [NSString string];
                }
            }
        }
    }
    
}
#pragma - mark       

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    
    if (currentElement) {

        currentValue = string;
        [rootDic setObject:string forKey:currentElement];
    }
    
}
#pragma - mark      
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if (currentElement) {
        [rootDic setObject:currentValue forKey:currentElement];
        currentElement = nil;
        currentValue = nil;
    }
    for(NSString *key in self.keyElements){

        if ([elementName isEqualToString:key]) {
            //        ,         
            if (rootDic) {

                [finalArray addObject:rootDic];
            }
        }
    }
}
#pragma - mark     
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
    
}

분석 이 완료 되면 final Array 를 출력 합 니 다.
{
        message = "\U7528\U6237\U4fe1\U606f";
    },
        {
        age = 10;
        name = "\U82b3\U4ed4\U5c0f\U811a\U5370";
        school = "JiangSu University";
    },
        {
        age = 22;
        name = "\U6bd2\U866b";
        school = "NanJing University";
    },
        {
        age = 23;
        name = "\U5973\U795e";
        school = "HongKong University";
    }
)

좋은 웹페이지 즐겨찾기