iOS 中 XML 數據交換格式 – iPhone手機開發技術文章 iPhone軟體開發教學課程

XML 是一種自描述的數據交換格式,但是 XML 的數據交換格式並沒有 JSON 來的輕便,但是無可否認的是,XML 的應用范圍也是非常廣泛的,比如在 ROS(一個開源機器人操作系統)中利用 XML 來描述包的依賴關系等,當然還有很多瞭。

對於 XML 文檔操作包括瞭“讀”與“寫”,讀入 XML 文檔並分析的過程稱為“解析” XML 文檔,“解析” XML 文檔在實際開發中是占很大比重的。

讀寫 XML 文檔,目前流行的有兩種模式:SAX 和 DOM 。SAM 是一種基於事件驅動的解析模式。解析 XML 的時候,程序從上到下讀取 XML 文檔,如果遇到開始標簽、結束標簽、屬性等,就會觸發相應的事件,但是這種解析 XML 文件有一個弊端就是隻能讀取 XML 文檔,而不能寫入 XML 文檔。但是也是有優點的,就是解析速度快,而iOS中推薦使用
SAX 解析模式。

DOM 模式是將 XML 文檔作為一棵樹狀結構來進行分析,提供獲取節點的內容,以及相關屬性,或是新增、刪除和修改節點的內容。 XML 解析器在加載 XML 文件以後,DOM 將 XML 文件的元素視為一個樹狀結構的節點,一次性讀入到內存中。如果文檔比較大,解析速度就會比較慢,這是不可避免的。但是 DOM 模式有一點是 SAX 無法取代的,就是
DOM 能夠修改 XML 文檔。

NSXML

NSXML 是蘋果自傢默認的解析框架,采用 SAX 模式進行解析。它是 SAX 解析模式的代表。NSXML 框架中的核心是 NSXMLParser 和它的委托協議 NSXMLParserDelegate。主要的解析工作是在委托協議的實現類中完成的,委托中定義瞭很多回調方法,在 SAX 解析器從上到下遍歷 XML 文檔的過程中,遇到開始標簽、結束標簽、文檔開始、文檔結束和字符串就會觸發相關方法。

常用的方法:

(1)parserDidStartDocument –文檔開始的時候觸發

(2)parser:didStartElement:namespaceURI:qualifiedName:attributes –遇到一個開始標簽時開始觸發,其中 namespaceURI 部分是命名空間, qualifiedName 是限定名,attributes 是字典類型的屬性集合

(3)parser:foundCharacters –遇到字符串時觸發

(4)parser:didEndElement:namespaceURI:qualifiedName –遇到結束標簽時觸發

(5)parserDidEndDocument –遇到文檔結束時觸發

下面實現一個解析的XMLParser類。

XMLParser.h

#import 

@interface XMLParser : NSObject 

//開始解析
-(void)start;

@end

XMLParser.m

-(void)start
{
    NSString* path = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"xml"];     //解析一個Test.xml文件的文檔
    
    NSURL *url = [NSURL fileURLWithPath:path];
    //開始解析XML
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    parser.delegate = self;
    [parser parse];
    NSLog(@"解析完成...");
}

微笑如有不足之處還望指出!

發佈留言