iOS 使用KissXML解析拼接XML文件

解析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 是元素節(jié)點

DDXMLNode

DDXMLNode 是子節(jié)點

XML文件的解析

解析XML文件的某個子節(jié)點

在項目中引入頭文件

'#import <KissXML.h>

    ///獲取文件路徑
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
    ///把文件轉(zhuǎn)化成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:@"http://book" error:nil];
     for (int i = 0; i < arr.count; i ++) {
        DDXMLElement *element = arr[i];
        //分別為當前接點的名字、上一個接點(平級)烟瞧、下一個接點(平級)佑钾、上一個接點、第一個子節(jié)點
        NSLog(@" 打印信息:%@--%@--%@--%@--%@--%@",element.name,element.previousSibling.name,element.nextSibling.name,element.previousNode.name,element.nextNode.name,element.parent.name);
    }
獲取XML文件子節(jié)點數(shù)組
  ///獲取文件路徑
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
    ///把文件轉(zhuǎn)化成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:@"http://book" error:nil];

修改拼接XML文件

修改XML文件的屬性
    ///獲取文件路徑
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
    ///把文件轉(zhuǎn)化成string
    NSString *xmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    ///使用kissXML解析
    DDXMLDocument *xmlDocument = [[DDXMLDocument alloc] initWithXMLString:xmlStr options:0 error:nil];
    
    
    NSLog(@"XML元素的數(shù)量%ld",xmlDocument.childCount);
    NSLog(@"XML元素的數(shù)組%@",xmlDocument.children);
    
    ///找到要修改的元素 修改內(nèi)容
    for (DDXMLElement *element in xmlDocument.children) {
        ///找到shop元素
        if ([element.name isEqualToString:@"shop"]) {
            DDXMLElement *shopElement = element;
            ///shop標簽下的所有元素數(shù)組
            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"];
///把文件轉(zhuǎn)化成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];

github demo鏈接 https://github.com/ShawnWang1/KissXMLDemo.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末币绩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子府阀,更是在濱河造成了極大的恐慌缆镣,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试浙,死亡現(xiàn)場離奇詭異董瞻,居然都是意外死亡,警方通過查閱死者的電腦和手機田巴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門钠糊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壹哺,你說我怎么就攤上這事抄伍。” “怎么了斗躏?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵逝慧,是天一觀的道長昔脯。 經(jīng)常有香客問我啄糙,道長笛臣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任隧饼,我火速辦了婚禮沈堡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘燕雁。我一直安慰自己诞丽,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布拐格。 她就那樣靜靜地躺著僧免,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捏浊。 梳的紋絲不亂的頭發(fā)上懂衩,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音金踪,去河邊找鬼浊洞。 笑死,一個胖子當著我的面吹牛胡岔,可吹牛的內(nèi)容都是我干的法希。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼靶瘸,長吁一口氣:“原來是場噩夢啊……” “哼苫亦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怨咪,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屋剑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惊暴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饼丘,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年辽话,在試婚紗的時候發(fā)現(xiàn)自己被綠了肄鸽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡油啤,死狀恐怖典徘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情益咬,我是刑警寧澤逮诲,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響梅鹦,放射性物質(zhì)發(fā)生泄漏裆甩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一齐唆、第九天 我趴在偏房一處隱蔽的房頂上張望嗤栓。 院中可真熱鬧,春花似錦箍邮、人聲如沸茉帅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堪澎。三九已至,卻和暖如春味滞,著一層夾襖步出監(jiān)牢的瞬間樱蛤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工桃犬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刹悴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓攒暇,卻偏偏與公主長得像土匀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子形用,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359