NSXMLParser

来源:互联网 发布:php和java对比 编辑:程序博客网 时间:2024/05/22 02:07

1 NSXMLParser

1.1 Initializing a Parser Object

1.2 Managing Delegates

1.3 Managing Parser Behavior

1.4 Parsing

1.5 Obtaining Parser State

2 NSXMLParserDelegate

3 实战演练

3.1 XML文件

3.2 测试


1 NSXMLParser

使用NSXMLParser,我们可以解析XML文档。NSXMLParser通过委托代理的方式,将XML中的元素通过代理返回

1.1 Initializing a Parser Object

/// 通过xml路径生成public convenience init?(contentsOfURL url: NSURL)/// 通过NSData生成public init(data: NSData)/// 通过流生成@available(iOS 5.0, *)public convenience init(stream: NSInputStream)

1.2 Managing Delegates

/// 代理unowned(unsafe) public var delegate: NSXMLParserDelegate?

1.3 Managing Parser Behavior

/// 是否显示限定名称(parser:didStartElement:namespaceURI:qualifiedName:attributes: and parser:didEndElement:namespaceURI:qualifiedName:)public var shouldProcessNamespaces: Bool/// 是否显示命名空间声明(parser:didStartMappingPrefix:toURI: and parser:didEndMappingPrefix:)public var shouldReportNamespacePrefixes: Bool/// 是否禁用实体的切换(parser:foundExternalEntityDeclarationWithName:publicID:systemID:)public var shouldResolveExternalEntities: Bool

1.4 Parsing

/// 开始解析public func parse() -> Bool/// 停止解析public func abortParsing()/// 解析错误@NSCopying public var parserError: NSError? { get }

1.5 Obtaining Parser State

/// 外部实体的公共标识符public var publicID: String? { get }/// 外部系统的标识符public var systemID: String? { get }///public var lineNumber: Int { get }///public var columnNumber: Int { get }

2 NSXMLParserDelegate

关于NSXMLParserDelegate多数情况下,我们只使用下面几个协议。

/// MARK: 解析开始optional public func parserDidStartDocument(parser: NSXMLParser)/// MARK: 解析结束optional public func parserDidEndDocument(parser: NSXMLParser)/// MARK: 解析出错optional public func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError)/// MARK: 解析器每次在XML中找到新的元素时,会调用该方法optional public func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])

3 实战演练

3.1 XML文件

在项目中创建文件,文件名为Main.xml

<?xml version="1.0" encoding="UTF-8"?><users xmlns="http://blog.csdn.net/y550918116j">    <user id="0" name="阳君" qq="937447974"/>    <user id="1" name="阳君" qq="937447974"/></users>

3.2 测试

////  YJXMLParserVC.swift//  YJFoundation////  CSDN:http://blog.csdn.net/y550918116j//  GitHub:https://github.com/937447974/Blog////  Created by admin on 16/3/10.//  Copyright © 2016年 阳君. All rights reserved.//import UIKit/// NSXMLParser解析XMLclass YJXMLParserVC: UIViewController, NSXMLParserDelegate {    override func viewDidLoad() {        super.viewDidLoad()        if let url = NSBundle.mainBundle().URLForResource("Main", withExtension: "xml") {            if let parser = NSXMLParser(contentsOfURL: url) {                parser.shouldProcessNamespaces = false;                parser.delegate = self;                parser.parse()            }        }    }    // MARK: - NSXMLParserDelegate    // MARK: 解析开始    func parserDidStartDocument(parser: NSXMLParser) {        print(__FUNCTION__)    }    // MARK: 解析结束    func parserDidEndDocument(parser: NSXMLParser) {        print(__FUNCTION__)    }    // MARK: 解析出错    func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {        print("解析错误\(parseError.localizedDescription)")    }    // MARK: 解析器每次在XML中找到新的元素时,会调用该方法    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {        print("\(elementName) - \(namespaceURI) - \(qName) - \(attributeDict)")    }}

 


Appendix

Sample Code

Swift

NSXMLParser Class Reference

NSXMLParserDelegate Protocol Reference

Event-Driven XML Programming Guide

Revision History

时间 描述 2015-12-08 博文完成 2016-03-10 博文更新,增加NSXMLParser的相关说明

CSDN:http://blog.csdn.net/y550918116j

GitHub:https://github.com/937447974/Blog

0 0
原创粉丝点击