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)
{
} return _classAry; }_classAry = [NSMutableArray array];
//練習
(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>