XML文件的解析

小知識:node

     關於翻譯:從事先約定好的數據結構中獲取數據ios

                  解析數據分三方:提供方, 解析方, 格式程序員

                  ios中分別表明:服務器,  程序員, XMLJSON數組

                  實際開發中,程序員只須要從服務器獲取數據,按照格式解析數據便可。服務器

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文件一旦出錯當即發現

     缺點:因爲一次性讀入整個文件,內存消耗較大。同時文件出錯時不能解析文件

相關文章
相關標籤/搜索