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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章