2014年8月29日 星期五

XMLParser programmatically using Swift and Object-C language

【說明】

此份筆記將紀錄如何解析XML檔案。

情境:
當從網路接收到XML檔案後將其儲存為NSData,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<double xmlns="http://www.webserviceX.NET/">3.4822</double>

我們要利用XMLParser解析,取得double內的值(3.4822)。


【片段程式碼】

假設接收到的資料儲存在名為receiveData,如下所示。

<Swift>
var receiveData:NSData = NSURLConnection.sendSynchronousRequest(urlRequest, returningResponse: &urlResponse, error: &error)!

<Object-C>
NSData *receiveData=[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&error];

我們建立一個funciton專門來處理解析XML的動作,如下所示。

<Swift>
func parserXML(xml: NSData) {

}

<Object-C>
- (void)parserXML:(NSData*)xml {

}
function名為parserXML,傳入NSData。

撰寫處理XML的程式,如下所示。

<Swift>
var xmlParser: NSXMLParser = NSXMLParser(data: xml)
xmlParser.delegate = self

xmlParser.parse()

<Object-C>
self.xmlParser = [[NSXMLParser alloc] initWithData:xml];
self.xmlParser.delegate = self;

[self.xmlParser parse];
建立一個NSXMLParser,並初始化傳入NSData。使用代理人機制的第一步,指定代理人是誰。執行method開始解析。

使用代理人機制的第二步,代理人必須採納Protocol,如下所示。

<Swift>
class ViewController: UIViewController, NSXMLParserDelegate {
}

<Object-C>
@interface ViewController ()<NSXMLParserDelegate>
@end

使用代理人機制的最後一步,實作Method,如下所示。

<Swift>
func parser(parser: NSXMLParser, foundCharacters string: String!) { 
    println("\(string)")
}

<Object-C>
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    NSLog(@"%@", string);
}
利用foundCharacters函式可以解析出double標籤內的值,第一行的標籤並不會被解析。

透過簡單的幾行程式即可解析出想要的資料,這只是較簡單的XML解析,未來還有更複雜的解析方式。

沒有留言:

張貼留言