加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析

发布时间:2020-12-16 05:43:22 所属栏目:百科 来源:网络整理
导读:在IOS中解析XML,本文为大家介绍怎么使用NSXMLParser解析XML。 XML源文件 Main.xml ?xml version="1.0" encoding="UTF-8"? tabmenus tabmenu tag = "0" icon = "tab_investment" icon_select = "tab_investment_select" title = "tab_bar_investment" / tabm

在IOS中解析XML,本文为大家介绍怎么使用NSXMLParser解析XML。

XML源文件

Main.xml

<?xml version="1.0" encoding="UTF-8"?>
<tabmenus>
    <tabmenu tag="0" icon="tab_investment" icon_select="tab_investment_select" title="tab_bar_investment"/>
    <tabmenu tag="1" icon="tab_my" icon_select="tab_my_select" title="tab_bar_my" />
</tabmenus>

Object-C解析

XCTest测试

//
// XMLTests.m
// XML解析
//
// Created by yangjun on 15/10/9.
// Copyright ? 2015年 六月. All rights reserved.
//

#import <XCTest/XCTest.h>

@interface XMLTests : XCTestCase <NSXMLParserDelegate>
{
    NSXMLParser *_parser;
}

@end

@implementation XMLTests

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Main" withExtension:@"xml"];
    _parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    _parser.delegate = self;
}

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    [_parser parse];// 解析xml
}

#pragma mark - NSXMLParserDelegate
#pragma mark 解析开始
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

#pragma mark 解析结束
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    [parser abortParsing];// 停止解析
}

#pragma mark 解析出错
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    NSLog(@"解析错误: %@",parseError.localizedDescription);
}

#pragma mark 解析器每次在XML中找到新的元素时,会调用该方法
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"%@ - %@ - %@ - %@",elementName,namespaceURI,qName,attributeDict);
}

@end

输出

2015-10-09 16:03:15.933 XML解析[4099:319229] parserDidStartDocument:
2015-10-09 16:03:15.933 XML解析[4099:319229] tabmenus - (null) - (null) - {
}
2015-10-09 16:03:15.933 XML解析[4099:319229] tabmenu - (null) - (null) - {
    icon = "tab_investment";
    "icon_select" = "tab_investment_select";
    tag = 0;
    title = "tab_bar_investment";
}
2015-10-09 16:03:15.933 XML解析[4099:319229] tabmenu - (null) - (null) - {
    icon = "tab_my";
    "icon_select" = "tab_my_select";
    tag = 1;
    title = "tab_bar_my";
}
2015-10-09 16:03:15.934 XML解析[4099:319229] parserDidEndDocument:

Swift解析

XCTest测试

//
// XMLTest.swift
// XML解析
//
// Created by yangjun on 15/10/9.
// Copyright ? 2015年 六月. All rights reserved.
//

import XCTest

/** xml解析测试*/
class XMLTest: XCTestCase,NSXMLParserDelegate {

    var xmlURL : NSURL? ///< xml的存放地址

    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
        self.xmlURL = NSBundle.mainBundle().URLForResource("Main",withExtension: "xml")
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }

    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
        if self.xmlURL != nil {
            let parser = NSXMLParser.init(contentsOfURL: self.xmlURL!)
            parser?.delegate = self;
            parser?.parse()
        }
    }

    // MARK: - NSXMLParserDelegate
    // MARK: 解析开始
    func parserDidStartDocument(parser: NSXMLParser) {
        print("parserDidStartDocument:")
    }

    // MARK: 解析结束
    func parserDidEndDocument(parser: NSXMLParser) {
        print("parserDidStartDocument:")
    }

    // 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)")
    }

}

输出:

parserDidStartDocument:
tabmenus - nil - nil - [:]
tabmenu - nil - nil - ["title": "tab_bar_investment","icon": "tab_investment","icon_select": "tab_investment_select","tag": "0"]
tabmenu - nil - nil - ["title": "tab_bar_my","icon": "tab_my","icon_select": "tab_my_select","tag": "1"]
parserDidStartDocument:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读