在ios中,提供了一套解析xml数据的api。其实也很简单,就是nsxmlparser和nsxmlparserdelegate。
可以直接指定到xml的url去实例化nsxmlparser
public convenience init?(contentsofurl url: nsurl)
解析文件,返回的是一次解析的结果
nsxmlparser.parse() -> bool
监听解析节点的属性
nsxmlparserdelegate.parser(parser: nsxmlparser, didstartelement elementname: string, namespaceuri: string?, qualifiedname qname: string?, attributes attributedict: [string : string])
监听解析节点的内容
nsxmlparserdelegate.parser(parser: nsxmlparser, foundcharacters string: string)
示例:
这里介绍基本的xml数据解析并打印出来.
1.准备xml数据
打开记事本,写下:
bill gates 15 tim cook 18
保存命名为data.xml.
2.解析xml
在xcode中新建一个项目,把data.xml导入新建的工程中,直接拖进去好了.在viewcontroller.swift里写下如下代码:
class viewcontroller: uiviewcontroller,nsxmlparserdelegate{
override func viewdidload() {
super.viewdidload()
let parser = nsxmlparser(contentsofurl: ns.pathforresource("data", oftype: "xml")!))
//1
parser!.delegate = self
parser!.parse()
}
var currentnodename:string!
func parser(parser: nsxmlparser, didstartelement elementname: string, namespaceuri: string?, qualifiedname qname: string?, attributes attributedict: [string : string]) {
currentnodename = elementname
if elementname == "student"{
if let id = attributedict["id"]{
print("id:\(id)")
}
}
}
func parser(parser: nsxmlparser, foundcharacters string: string) {
//2
let str = string.stringbytrimmingcharactersinset(nscharacterset.whitespaceandnewlinecharacterset())
if str != "" {
print("\(currentnodename):\(str)")
}
}
override func didreceivememorywarning() {
super.didreceivememorywarning()
// dispose of any resources that can be recreated.
}
}
代码注释:
1.使用nsxmlparser需要nsxmlparserdelegate代理
2.去除打印如
func parser(parser: nsxmlparser, foundcharacters string: string) {
print("\(string):\(str)")
}
将会把前面的标签打印出来.
3.代码运行结果
id:001 name:bill gates age:15 id:002 name:tim cook age:18