json解析,json数据用得地方非常多:
解析方法:
NSString *path = [[NSBundle mainBundle] pathForResource:@"a" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableArray *arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
[self.arr addObjectsFromArray:arr];
xml解析分为sax解析和dom解析:
sax解析:
sax解析需要使用协议:<NSXMLParserDelegate>
解析方法如下:
- (void)saxXmlParser
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Dress" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
开始解析:
[parser parse];
[parser release];
}
协议:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
开始节点:
if ([elementName isEqualToString:@"arr"]) {
NSMutableArray *arr = [NSMutableArray array];
[self.arr addObject:arr];
}
if ([elementName isEqualToString:@"dic"]) {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSMutableArray *arr = [self.arr lastObject];
[arr addObject:dic];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
解析到的字符串:
self.str = string;
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"name"]) {
NSMutableArray *arr = [self.arr lastObject];
NSMutableDictionary *dic = [arr lastObject];
[dic setObject:self.str forKey:@"name"];
}
if ([elementName isEqualToString:@"price"]) {
NSMutableArray *arr = [self.arr lastObject];
NSMutableDictionary *dic = [arr lastObject];
[dic setObject:self.str forKey:@"price"];
}
if ([elementName isEqualToString:@"pic"]) {
NSMutableArray *arr = [self.arr lastObject];
NSMutableDictionary *dic = [arr lastObject];
[dic setObject:self.str forKey:@"pic"];
}
}
dom解析:(需要第三方)
解析方法如下:
- (void)domXmlParser{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Dress" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
GDataXMLElement *root = [document rootElement];
NSArray *arr = [root nodesForXPath:@"array/arr" error:nil];
for (GDataXMLElement *ele in arr) {
NSArray *smallArr = [ele elementsForName:@"dic"];
NSMutableArray *array = [NSMutableArray array];
for (GDataXMLElement *element in smallArr)
{
NSArray *arr1 = [element elementsForName:@"name"];
NSArray *arr2 = [element elementsForName:@"price"];
NSArray *arr3 = [element elementsForName:@"pic"];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
for (GDataXMLElement *e in arr1) {
NSString *value = [e stringValue];
[dic setObject:value forKey:@"name"];
}
for (GDataXMLElement *e in arr2) {
NSString *value = [e stringValue];
[dic setObject:value forKey:@"price"];
}
for (GDataXMLElement *e in arr3) {
NSString *value = [e stringValue];
[dic setObject:value forKey:@"pic"];
}
[array addObject:dic];
}
[self.arr addObject:array];
}
NSLog(@"%@", self.arr);
}