xml解析
来源:互联网 发布:英语六级听力软件那个 编辑:程序博客网 时间:2024/05/22 22:55
-----------------------------------------第一种解析方式 SAX-------------------------------------------
遵循协议NSXMLParserDelegate
- (IBAction)buttonAction:(UIButton *)sender {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
//根据data数据化初始化出一个NSXMLParser对象
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
// 4.设置xmlParser的相关属性
//是否处理命名空间
[xmlParser setShouldProcessNamespaces:NO];
//不处理是否报告命名空间
[xmlParser setShouldReportNamespacePrefixes:NO];
// 5.设置代理
xmlParser.delegate = self;
// 6.开始解析
[xmlParser parse];
}
#pragma mark 解析开始 打开文档
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
self.modelArray = [NSMutableArray array];
}
#pragma mark 开始解析 打开标签
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"student"]) {
Model *model = [[Model alloc] init];
[self.modelArray addObject:model];
}
self.currentElementName = elementName;
NSLog(@"%@",self.currentElementName);
}
#pragma mark 取值 每走一次标签 无论是打开还是关闭 接下来都会走取值方法 没有值的时候为空
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
Model *model = [self.modelArray lastObject];
if ([self.currentElementName isEqualToString:@"name"]) {
model.name = string;
}else if ([self.currentElementName isEqualToString:@"gender"]) {
model.gender = string;
}else if ([self.currentElementName isEqualToString:@"age"]) {
model.age = string;
}
}
#pragma mark 关闭标签 执行完后走 取值方法
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//否则在下一次打开标签的时候。currentElementName 仍然为上一次的标签,如果判断的话会出错
self.currentElementName = nil;
}
#pragma mark 解析结束后 关闭文档
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
for (Model *temp in self.modelArray) {
NSLog(@"%@",temp.name);
}
}
-----------------------------------------第二种解析方式 DOM-----------第三方库解析--------------------------------
/*
//GDATA使用前配置
// 1.首先添加 libxml2.dylib这个动态数据库 (build phrases)
// 2.header seach path 里面添加 /usr/include/libxml2 (build setting)
// Other Linker 里面添加 -lxml2 (build setting)
// 3.如果是ARC工程使用 则在build phrases 里面找到 compile sources 里找到对应 .m 文件 添加编辑约束
// ARC 下用到MRC -fno-objc-arc (表示指定的文件编译是不用ARC编译 在build phases 下
// compile sources )
// MRC 下用到ARC -fobjc-arc
*/
#pragma mark xmlDOM解析
- (IBAction)XMLdoucmentButtonAction:(UIButton *)sender {
// 初始化数组
self.XMLDOMArray = [NSMutableArray array];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"xml"];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
//根据NSData创建对象
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
// 4.取出根节点
GDataXMLElement *rootElement = [document rootElement];
NSLog(@"%@",rootElement);
// 5.取出所有的student节点
NSArray *stuElementArray = [rootElement elementsForName:@"student"];
// 6.便利数组 拿到下一层节点
for (GDataXMLElement *element in stuElementArray) {
//拿到的是name的节点
GDataXMLElement *nameELement = [[element elementsForName:@"name"] lastObject];
//拿到name节点的值
NSString *name = [nameELement stringValue];
GDataXMLElement *genderELement = [[element elementsForName:@"gender"] lastObject];
NSString *gender = [genderELement stringValue];
GDataXMLElement *ageElement = [[element elementsForName:@"age"] lastObject];
NSString *age = [ageElement stringValue];
Model *model = [[Model alloc] init];
model.name = name;
model.gender = gender;
model.age = age;
[self.XMLDOMArray addObject:model];
}
for (Model *model in self.XMLDOMArray) {
NSLog(@"name:%@ gender:%@ age:%@",model.name,model.gender,model.age);
}
}
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- MFC中为ListControl控件添加NM_CLICK消息选择控件中的文件并获取文件路径和文件名字
- WiFI 框架分析
- Oracle表分区
- Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
- 密码破解之RADIUS-CHAP-MD5
- xml解析
- 做个小的游戏——开发日志
- eclipse或IDEA连接魅蓝
- Android中Device Provisioned引起的问题分析
- 提高Interface Builder高效工作的8个技巧
- Code::Blocks手册 使用篇
- Kettle-2-问题总结
- SAT阅读高分技巧:带着问题通读全文
- Markdown使用语法