小知識:node
關於翻譯:從事先約定好的數據結構中獲取數據ios
解析數據分三方:提供方, 解析方, 格式程序員
ios中分別表明:服務器, 程序員, XML、JSON數組
實際開發中,程序員只須要從服務器獲取數據,按照格式解析數據便可。服務器
1、XML(可擴展標記語言)的解析方式:SAX 和DOM解析。其結構爲:數據結構
2、SAX解析步驟:spa
// 獲取路徑翻譯
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];代理
// 從文件中讀取二進制流對象
NSData *data = [NSData dataWithContentsOfFile:filePath];
// 建立XMLParser對象
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 設置delegate
parser.delegate = self;
// 開始解析
[parser parse];
代理的幾個重要方法,在此能夠提取本身想要的數據
// 遇到開標籤
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
}
// 取值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
}
// 遇到關標籤
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
}
3、 DOM解析(須要導入第三方類庫,此類庫由Google提供,後面會有附加,而且導入後要作一些修改,修改的內容 .h 文件的30~36行中有詳細說明)
// 獲取文件路徑
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];
// 獲取文件內容
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 轉化爲XMLDocument(此時文檔已經解析完畢,而且轉化爲XMLDoucment存儲,同時文檔的樹形結構已清晰明瞭)
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithXMLString:str options:0 error:nil];
// 方式1、 不斷找子節點來獲取數據
// 1,獲取根節點
GDataXMLElement *rootElement = document.rootElement;
// 2,獲取子節點(經過children能夠逐級向下找)
NSArray *childElement = rootElement.children;
方式2、 使用elementForName:方法,給出一個節點的名字找到節點
1,獲取根節點
GDataXMLElement *rootElement = document.rootElement;
2,經過elementForName:找
NSArray *arr = [rootElement elementsForName:name];
3, 從數組中找到須要的節點
GDataXMLElement *element = arr[1];
4,經過elementForName:找
NSArray *arr1 = [element elementsForName:@"sex"];
方式3、經過絕對路徑查找對應的數據
NSArray *nodes = [document nodesForXPath:path error:nil];
// 方式4、經過相對路徑查找
NSArray *nodes = [document nodesForXPath:@"//sex" error:nil];
4、兩種解析方式的優缺點
SAX解析爲逐行解析數據
優勢:1,逐行解析,不會一次性讀入整個文檔,減小內存消耗
2, 文件損壞,對解析沒有影響
缺點:逐行解析,沒有辦法獲取文件的層級結構,獲取比較繁瑣
DOM解析:一次性讀入整個文檔進行解析(原理:開標籤入棧,關標籤出棧)
優勢:1,一次性讀入整個文件時,會將數據的樹形結構記錄下來,有利於程序員分析數據
2, XML文件一旦出錯當即發現
缺點:因爲一次性讀入整個文件,內存消耗較大。同時文件出錯時不能解析文件