DOM解析(GDataXMLNode)詳解,xml解析

jopen 9年前發布 | 2K 次閱讀 Objective-C IOS

//(動態庫環境的配置)
//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);
    

    } } </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!