IOS 解析XML格式

来源:互联网 发布:阿里云数据盘克隆 编辑:程序博客网 时间:2024/05/21 07:12

新建空文件 创建XML文件 写入代码
例如:

//data.xml<data>    <person age="20">me</person>    <person age="17">xin</person>    <person>love</person>    <a>        <b>            <c>Data</c>        </b>    </a></data>

在viewDidLoad()函数中写入

    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.        //传入一个路径解析,创建一个XML的解析对象        var paser = NSXMLParser(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("data", ofType: "xml")!))        paser!.delegate = self        paser?.parse()    }

在全局定义一个currenNodeName

var currenNodeName:String!
    //开始解析时    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {        currenNodeName = elementName        //elementName 节点名称//        println(elementName)        //解析节点里的属性        if elementName=="person"{//            var age: AnyObject? = attributeDict["age"]//            println("age:\(age!)")//直接输出,如果遇到没有 age 属性的 person 则会出错            if let age: AnyObject = attributeDict["age"]{                println("age:\(age)")  //如果有[age]属性的就输出,没有不做处理            }        }    }

输出节点中的值:

    //查找到字符时    func parser(parser: NSXMLParser, foundCharacters string: String?) {//        println(string!)        //去掉空格和空行        var str = string?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())        if str != ""{    //字符串不为空则输出//            println(str!)            //节点,值            println("current node:\(currenNodeName),value:\(str!)")        }    }

完整的代码

//viewcontroller.swiftimport UIKitclass ViewController: UIViewController,NSXMLParserDelegate {    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.        //传入一个路径解析,创建一个XML的解析对象        var paser = NSXMLParser(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("data", ofType: "xml")!))        paser!.delegate = self        paser?.parse()    }    var currenNodeName:String!    //开始解析时    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {        currenNodeName = elementName        //elementName 节点名称//        println(elementName)        //解析节点里的属性        if currenNodeName=="person"{//            var age: AnyObject? = attributeDict["age"]//            println("age:\(age!)")            if let age: AnyObject = attributeDict["age"]{                println("age:\(age)")            }        }    }    //查找到字符时    func parser(parser: NSXMLParser, foundCharacters string: String?) {//        println(string!)        //去掉空格和空行        var str = string?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())        if str != ""{//            println(str!)            //节点,值            println("current node:\(currenNodeName),value:\(str!)")        }    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }}
0 0
原创粉丝点击