Objective - C 학습 의 해석 XML
4764 단어 ios분석 xmlXMLParserNSXMLParser
열성 적 인 네티즌 의 지적 을 통 해 본 고 는 어느 정도 문제 가 존재 하 므 로, 먼저 나 자신 에 게 일 깨 워 주 고, 시간 이 있 을 때 조정 하여 고 쳐 라.
문제 가 있 으 면 여러분 도 적극적으로 지적 해 주 십시오. 감사합니다.
본 고 는 로 컬 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";
}
)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.