解析XML文件-KissXML

可能报错

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

  2. xcod9以后使用时报错
    在DDXMLDocument.m引入头文件#import

使用

导入头文件#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);
            }
        }
    }

你可能感兴趣的:(解析XML文件-KissXML)