可能报错
使用KissXML解析xml文件时,#import<libxml/tree.h>找不到
原因:类库没有链接进来
方法:链接类库:Build Settings 中搜索Header Search Paths,并设置为$(SDKROOT)/usr/include/libxml2xcod9以后使用时报错
在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);
}
}
}