NSXMLParser

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解析XML
class 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值