此份筆記將紀錄如何解析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解析,未來還有更複雜的解析方式。
沒有留言:
張貼留言