可能報(bào)錯(cuò)
使用KissXML解析xml文件時(shí),#import<libxml/tree.h>找不到
原因:類庫(kù)沒(méi)有鏈接進(jìn)來(lái)
方法:鏈接類庫(kù):Build Settings 中搜索Header Search Paths,并設(shè)置為$(SDKROOT)/usr/include/libxml2xcod9以后使用時(shí)報(bào)錯(cuò)
在DDXMLDocument.m引入頭文件#import <libxml2/libxml/parser.h>
使用
導(dǎo)入頭文件#import "DDXML.h"
方法一
//獲取文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"poetryXML" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSError *error;
//創(chuàng)建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);
//獲取內(nèi)容
// LOGS(@"count--%ld",data.childCount);
NSString *str = [[data childAtIndex:0] stringValue];
// LOGS(@"str--%@",str);
}
}
}
方法2:xml中XPath導(dǎo)航定位,XPath可到w3school學(xué)習(xí)
//方法1:
//所有row
NSArray *rowArr = [[doc children][0] children];
for (DDXMLNode *row in rowArr) {
//獲取每詩(shī)歌的信息
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:
//第一次試的時(shí)候,如果xml文檔有命名空間(xmln="XXX"),該方法居然失效。修改過(guò)xml后又沒(méi)問(wèn)題了,可能是xml的問(wèn)題
NSError *error2;
NSArray *nodeRowArr = [doc nodesForXPath:@"http://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]);
//獲取內(nèi)容
// LOGS(@"count--%ld",data.childCount);
//獲取內(nèi)容
NSString *str = [data stringValue];
LOGS(@"str--%@",str);
}
}
}