在Mac OSX上,分別有
NSXMLParser跟
NSXMLDocument來處理有關SAX與DOM方式的XML parsing。然而在iOS上的Cocoa Touch,卻只剩下SAX的
NSXMLParser的處理方式。相較於DOM來說,SAX的處理方式是較為快速與節省資源的,也或許是這樣才會在iOS上只保留這種方式的parsing。
然而,如果只是簡單格式的XML讀取,用NSXMLParser來parse可能是很快速簡便。但是如果要處理的XML格式眾多或是格式複雜,那就可能不是那麼好過了...而且NSXMLParser也只能處理讀取時的parsing。如果是要將資料輸出成XML格式,那不使用DOM的處理將會變得比較難以處理。
既然是DOM-based parser,當然除了可以讀取,也可以輸出成為XML。使用上很簡單,只要
#import "APXML.h"
就可以使用到全部的相關類別,不必一一去import個別的class。
Parse XML:
APDocument *doc = [APDocument documentWithXMLString:xmlstring];
取得Root Element:
APElement *rootElem = [doc rootElement];
讀取所有子element:
NSArray *childElements = [rootElem childElements];
讀取element name:
NSString *elementName = elem.name;
讀取element value:
NSString *elementValue = elem.value;
讀取特定名稱之attribute:
NSString *attrValue = [elem valueForAttributeNamed:attributeName];
輸出部分則為
Create Element:
APElement *elem = [APElement elementWithName:elementName];
Set attribute & element value:
[elem addAttributeNamed:attrName withValue:attiValue];
[elem appendValue:elementValue];
Add child element:
[elem addChild: childElem];
Create XML Document:
APDocument *doc = [[APDocument alloc] initWithRootElement: elem];
Output XML string:
NSString *xmlString = [doc xml];
使用語法算是十分簡單、直覺。
其實,要自己實作DOM-based parser也不算太難,但是總是比較費工夫、品質也需要時間來鍛鍊。既然有現成又不錯的lib,當然能善加利用會更好囉~