DOM解析(GDataXMLNode)详解,xml解析手机开发

//(动态库环境的配置) 
//1、获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中 
//2、向工程中增加“libxml2.2dylib”库(最新版) 
//(下边三步重要) 
//3、在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2"到路径中 
//4.搜索Other Linker Flags,添加-lxml2(这一步最好加上,否则会出问题) 
//5.在build phases的GDataXMLNode.m文件给成飞arc环境 
 
//6、添加“GDataXMLNode.h”文件到头文件中,如工程能编译通过,则说明GDataXMLNode添加成功 
 
 
@interface ViewController () 
@property (nonatomic, strong) NSMutableArray * classAry; 
@property (nonatomic, strong) NSMutableArray * stuAry; 
@property (nonatomic, strong) NSMutableString * tempStr; 
@property (nonatomic, strong) JRClass * jrClass; 
@property (nonatomic, strong) JRStudent * jrStu; 
@end 
 
 
@implementation ViewController 
 
 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 
 
 
//懒加载 
- (NSMutableArray *)classAry 
{ 
    if (!_classAry) 
    { 
        _classAry = [NSMutableArray array]; 
    } 
    return _classAry; 
} 
 
 
 
 
//练习 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSURL * url = [[NSBundle mainBundle] URLForResource:@"laoshi.xml" withExtension:nil]; 
    NSData * data = [NSData dataWithContentsOfURL:url]; 
    GDataXMLDocument * document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; 
     
    GDataXMLElement * root = document.rootElement; 
    NSArray * array = root.children; 
     
    // 一个e代表一个班级 
    for(GDataXMLElement * e in array) 
    { 
        GDataXMLNode * node = [e attributeForName:@"name"]; 
        //班级名 
        self.jrClass = [[JRClass alloc] init]; 
        self.jrClass.className = node.stringValue; 
         
        //班级成员 
        self.stuAry = [NSMutableArray array]; 
        self.jrClass.members = self.stuAry; 
         
        NSArray * array2 = [e elementsForName:@"member"]; 
        for(GDataXMLElement * e2 in array2) 
        { 
            JRStudent * stu = [[JRStudent alloc] init]; 
            [self.stuAry addObject:stu]; 
             
            GDataXMLNode * node = [e2 attributeForName:@"name"]; 
            stu.stuName = node.stringValue; 
             
            GDataXMLNode * node2 = [e2 attributeForName:@"age"]; 
            stu.stuAge = [node2.stringValue integerValue]; 
             
            stu.stuType = e2.stringValue; 
        } 
         
        //添加班级数组 
        [self.classAry addObject:self.jrClass]; 
    } 
     
    NSLog(@"%@", self.classAry); 
     
     
 
 
} 
 
 
 
 
//进阶用法获,取节点内部的属性 
- (void)test4 
{ 
    //获取xml文件,创建data 
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"xml.xml" withExtension:nil]; 
    NSData * data = [NSData dataWithContentsOfURL:url]; 
     
    //创建GDataXMLDocument,传递data(返回的文件就包含了所以的xml的内容) 
    GDataXMLDocument * document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; 
     
    //获取GDataXMLDocument文件对象的第一层子节点(根节点) 
    GDataXMLElement * root = document.rootElement; 
     
    //获取根节点内部的元素 
    NSArray * array = [root elementsForName:@"part1"]; 
     
    //获取根节点内部的元素的name和内容    (e的内容 {type:1 name:book xml:"<book>语文</book>"} ) 
    for(GDataXMLElement * e in array) 
    { 
        GDataXMLNode * attr = [e attributeForName:@"name"]; 
        NSLog(@"%@", attr.stringValue); 
    } 
} 
 
 
 
 
//进阶用法(xml有多层) 
- (void)test3 
{ 
    //获取xml文件,创建data 
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"xml.xml" withExtension:nil]; 
    NSData * data = [NSData dataWithContentsOfURL:url]; 
     
    //创建GDataXMLDocument,传递data(返回的文件就包含了所以的xml的内容) 
    GDataXMLDocument * document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; 
     
    //获取GDataXMLDocument文件对象的第一层子节点(根节点) 
    GDataXMLElement * root = document.rootElement; 
     
    //获取根节点内部的元素 
    NSArray * array = [root elementsForName:@"part1"]; 
     
    //获取根节点内部的元素的name和内容    (e的内容 {type:1 name:book xml:"<book>语文</book>"} ) 
    for(GDataXMLElement * e in array) 
    { 
        NSArray * array2 = [e elementsForName:@"book"]; 
        for(GDataXMLElement * e2 in array2) 
        { 
            NSLog(@"%@====%@", e2.stringValue, e2.name); 
        } 
    } 
} 
 
 
//进阶用法(xml只有一层) 
- (void)test2 
{ 
    //获取xml文件,创建data 
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"xml.xml" withExtension:nil]; 
    NSData * data = [NSData dataWithContentsOfURL:url]; 
     
    //创建GDataXMLDocument,传递data(返回的文件就包含了所以的xml的内容) 
    GDataXMLDocument * document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; 
     
    //获取GDataXMLDocument文件对象的第一层子节点(根节点) 
    GDataXMLElement * root = document.rootElement; 
     
    //获取根节点内部的元素 
    NSArray * array = [root elementsForName:@"book"]; 
     
    //获取根节点内部的元素的name和内容    (e的内容 {type:1 name:book xml:"<book>语文</book>"} ) 
    for(GDataXMLElement * e in array) 
    { 
        NSLog(@"%@====%@", e.stringValue, e.name); 
    } 
} 
 
 
 
 
//基本用法 
- (void)test 
{ 
    //获取xml文件,创建data 
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"xml.xml" withExtension:nil]; 
    NSData * data = [NSData dataWithContentsOfURL:url]; 
     
    //创建GDataXMLDocument,传递data(返回的文件就包含了所以的xml的内容) 
    GDataXMLDocument * document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; 
     
    //获取GDataXMLDocument文件对象的第一层子节点(根节点) 
    GDataXMLElement * root = document.rootElement; 
     
    //获取根节点内部的元素 
    NSArray * array = root.children; 
     
    //获取根节点内部的元素的name和内容    (e的内容 {type:1 name:book xml:"<book>语文</book>"} ) 
    for(GDataXMLElement * e in array) 
    { 
        NSLog(@"%@", e); 
        NSLog(@"%@====%@", e.stringValue, e.name); 
    } 
} 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5109.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论