解析XML文件-KissXML

可能报错

  1. 使用KissXML解析xml文件时,#import<libxml/tree.h>找不到
    原因:类库没有链接进来
    方法:链接类库:Build Settings 中搜索Header Search Paths,并设置为$(SDKROOT)/usr/include/libxml2

  2. xcod9以后使用时报错
    在DDXMLDocument.m引入头文件#import <libxml2/libxml/parser.h>

使用

导入头文件#import "DDXML.h"
方法一

//获取文件
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"poetryXML" ofType:@"xml"];
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    NSError *error;
    //创建xml文档模型
    DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:data options:0 error:&error];
    if (error) {
        
        LOGS(@"%@",error);
    }else{
        LOGS(@"获取成功");
    }

    //获取根元素
    DDXMLElement *root = [doc rootElement];
    //方法1:层层遍历
    NSArray *RowArr = [root elementsForName:@"Row"];
    for (DDXMLElement *row in RowArr) {

        NSArray *CellArr = [row elementsForName:@"Cell"];
        for (DDXMLElement *cell in CellArr) {
            
            NSArray *DataArr = [cell elementsForName:@"Data"];
            for (DDXMLElement *data in DataArr) {
                
                //获取属性
               // NSString *ss = [[data attributeForName:@"ss"] stringValue];
               //NSLog(@"%@",ss);
                
                //获取内容
               // LOGS(@"count--%ld",data.childCount);
                NSString *str = [[data childAtIndex:0] stringValue];
               // LOGS(@"str--%@",str);
            }
        }
    }

方法2:xml中XPath导航定位,XPath可到w3school学习
//方法1:

    //所有row
    NSArray *rowArr = [[doc children][0] children];
    for (DDXMLNode *row in rowArr) {
        
        //获取每诗歌的信息
        NSArray *ssArr = [row nodesForXPath:@"child::Cell/Data" error:nil];
       // NSLog(@"%@",[[ssArr[0] childAtIndex:0] stringValue]);
       // NSLog(@"%@",[[ssArr[1] childAtIndex:0] stringValue]);
       // NSLog(@"%@",[[ssArr[2] childAtIndex:0] stringValue]);

    }

方法2:

    //第一次试的时候,如果xml文档有命名空间(xmln="XXX"),该方法居然失效。修改过xml后又没问题了,可能是xml的问题
    NSError *error2;
    NSArray *nodeRowArr = [doc nodesForXPath:@"//Row" error:&error2];
    for (DDXMLNode *row in nodeRowArr) {

        for (DDXMLNode *cell in [row children]) {
            
            for (DDXMLNode *data in [cell children]) {
                
                //获取属性
                //NSString *ss = [data  stringValue];
              //  NSArray *ssArr = [data nodesForXPath:@"attribute::ss" error:nil];
               // NSLog(@"ss--%@",[ssArr[0] stringValue]);
                //获取内容
                // LOGS(@"count--%ld",data.childCount);
                //获取内容
                NSString *str = [data stringValue];
                 LOGS(@"str--%@",str);
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,018评论 3 119
  • 天下有三种事情,你的事,我的事,老天的事,做好自己的事,才是最重要的,先把自己的事情管理好,才可以引发别人,要自己...
    冯妮阅读 350评论 0 1
  • 第十二章 关于当事人中心治疗的研究思路 对于相对来说不太熟悉美国心理学实证研究传统的欧洲读者,我怎样才能向他们...
    暖阳_1332阅读 1,253评论 0 3
  • ①自我介绍:大家好,我是冰?心say,即将成为一名英语教师。自己平时喜欢做运动,读书,听音乐等。我的座右铭是Not...
    竺冰落阅读 376评论 1 3
  • 泰国最受人关注的莫过于人妖了。当初选择去泰国时,同事们都说:你带孩子去泰国不太好吧。是呀,泰国有人妖表演,带孩子去...
    青鸾gl阅读 1,720评论 0 2