iOS 使用KissXML解析拼接XML文件
2020-04-08 本文已影响0人
搬砖行家
解析XML文件的方式有很多,今天我们介绍的是KissXML解析修改XML。
大纲:
kissxml大纲.png集成KissXML
使用Cocoapods集成
KissXML GitHub 路径 https://github.com/robbiehanson/KissXML
cd 你的项目路径
pod init
在项目中打开 Podfile 文件 添加 pod 'KissXML'
pod install
KissXML基本了解
DDXMLDocument
DDXMLDocument 是文档
DDXMLElement
DDXMLElement 是元素节点
DDXMLNode
DDXMLNode 是子节点
XML文件的解析
解析XML文件的某个子节点
在项目中引入头文件
'#import <KissXML.h>
///获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
///把文件转化成string
NSString *xmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
///使用kissXML解析
DDXMLDocument *xmlDocument = [[DDXMLDocument alloc] initWithXMLString:xmlStr options:0 error:nil];
///找到xmlDocument下面所有的book元素
NSArray *arr = [xmlDocument nodesForXPath:@"//book" error:nil];
for (int i = 0; i < arr.count; i ++) {
DDXMLElement *element = arr[i];
//分别为当前接点的名字、上一个接点(平级)、下一个接点(平级)、上一个接点、第一个子节点
NSLog(@" 打印信息:%@--%@--%@--%@--%@--%@",element.name,element.previousSibling.name,element.nextSibling.name,element.previousNode.name,element.nextNode.name,element.parent.name);
}
获取XML文件子节点数组
///获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
///把文件转化成string
NSString *xmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
///使用kissXML解析
DDXMLDocument *xmlDocument = [[DDXMLDocument alloc] initWithXMLString:xmlStr options:0 error:nil];
///找到xmlDocument下面所有的book元素
NSArray *arr = [xmlDocument nodesForXPath:@"//book" error:nil];
修改拼接XML文件
修改XML文件的属性
///获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
///把文件转化成string
NSString *xmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
///使用kissXML解析
DDXMLDocument *xmlDocument = [[DDXMLDocument alloc] initWithXMLString:xmlStr options:0 error:nil];
NSLog(@"XML元素的数量%ld",xmlDocument.childCount);
NSLog(@"XML元素的数组%@",xmlDocument.children);
///找到要修改的元素 修改内容
for (DDXMLElement *element in xmlDocument.children) {
///找到shop元素
if ([element.name isEqualToString:@"shop"]) {
DDXMLElement *shopElement = element;
///shop标签下的所有元素数组
NSArray *penChildren = shopElement.children;
for (DDXMLElement *childelement in penChildren) {
///找到pen元素
if ([childelement.name isEqualToString:@"pen"]) {
for (DDXMLNode *childnode in childelement.children) {
if ([childnode.name isEqualToString:@"type"]) {
[childnode setStringValue:@"---000---"];
}
if ([childnode.name isEqualToString:@"manufacturers"]) {
[childnode setStringValue:@"---xxxxx---"];
}
}
}
}
}
}
///修改完成之后需要把XML文件重新保存到新的地址 原文件修改的值不变
NSString *newPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"newXML.xml"];
NSFileManager *fileManager = [NSFileManager defaultManager];
///查看路径是否存在
BOOL isFile = [fileManager fileExistsAtPath:newPath];
if (isFile) {
[fileManager removeItemAtPath:newPath error:nil];
}
NSMutableData *mutableData = [NSMutableData data];
NSData *data = [xmlDocument XMLData];
[mutableData appendData:data];
[mutableData writeToFile:newPath atomically:YES];
拼接XML文件
///获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
///把文件转化成string
NSString *xmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
///使用kissXML解析
DDXMLDocument *xmlDocument = [[DDXMLDocument alloc] initWithXMLString:xmlStr options:0 error:nil];
for (DDXMLElement *ele in xmlDocument.children) {
if ([ele.name isEqualToString:@"shop"]) {
DDXMLElement *elementOne = [DDXMLElement elementWithName:@"one" stringValue:@"one"];
DDXMLElement *elementTwo = [DDXMLElement elementWithName:@"two" stringValue:@"two"];
[ele addChild:elementOne];
[ele addChild:elementTwo];
}
}
///修改完成之后需要把XML文件重新保存到新的地址 原文件修改的值不变
NSString *newPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"newXML.xml"];
NSFileManager *fileManager = [NSFileManager defaultManager];
///查看路径是否存在
BOOL isFile = [fileManager fileExistsAtPath:newPath];
if (isFile) {
[fileManager removeItemAtPath:newPath error:nil];
}
NSMutableData *mutableData = [NSMutableData data];
NSData *data = [xmlDocument XMLData];
[mutableData appendData:data];
[mutableData writeToFile:newPath atomically:YES];