午夜福利视频2020

当前位置: 移动技术网 > 网络运营>移动>IOS > 在iOS中 XML文件的解析和写入

在iOS中 XML文件的解析和写入

74  人参与 | 时间:2018-11-11 | 我要评论

午夜福利视频2020请记住本站备用网址:,收藏本站链接地址:http://jhczc888.com/

熟女性息,cmdagent.exe,黄昏晓伴奏

在ios中 xml文件的解析和写入,解析和写入xml文件常用到的工具,kissxml,touchxml,其中kissxml是基于touchxml封装的一个第三方库.这里主要以kissxml为例。

写入和解析xml文件:

这里写图片描述

首先了解概念,xml中element是节点,attribute是该节点的属性,创建节点时可以连同节点的值一起创建,同理属性: 张三 ,这样则可表示,节点name的值为张三,他有一个type的属性为string

其次分析xml,以上图为例,如何写一个这样的简单xml,首先确定这样的xml,根节点为:message,在message下面有个子节点:x,子节点下面还有个子节点:rect,rect是一个没有值,只有属性的子节点.

午夜福利视频2020我们来写入xml,代码如下:

//创建根节点

nsxmlelement *name = [nsxmlelement elementwithname:@“message"];

//设置根节点的属性

午夜福利视频2020[name addattributewithname:@"id" stringvalue:@“sc6um-27"];

午夜福利视频2020[name addattributewithname:@"to" stringvalue:@“demo@winkkeebaoim/spark 2.6.3”];

[name addattributewithname:@"from" stringvalue:@“test1@lovejiajiao.com"];

//设置子节点 x,并添加xmlns属性

nsxmlelement *x = [nsxmlelement elementwithname:@"x"];

午夜福利视频2020[x addattributewithname:@"xmlns" stringvalue:@"https://version2software.com/protocol/whiteboard"];

午夜福利视频2020//将x作为name的子节点

[name addchild:x];

//创建子节点rect并添加他的属性

nsxmlelement *childelement = [nsxmlelement elementwithname:@“rect"];

午夜福利视频2020[childelement addattributewithname:@"id" stringvalue:@“1385710972183/demo@winkeebaoim/spark 2.6.3"];

午夜福利视频2020[childelement addattributewithname:@"x" stringvalue:@“191”];

[childelement addattributewithname:@"y" stringvalue:@“131”];

午夜福利视频2020[childelement addattributewithname:@"width" stringvalue:@“107”];

[childelement addattributewithname:@"height" stringvalue:@“89”];

午夜福利视频2020//将childelement作为x的子节点

[x addchild:childelement];

午夜福利视频2020由于本xml格式相对简单,解析的话不会很复杂,简单说一下

午夜福利视频2020如果要取到rect里面的id属性的值,先去到x根节点的内容,然后继续解析到rect节点,如下

[[[message elementforname:@”x”] elementforname:@”rect”] attributeforname:@“id”];// elementsforname加s的方法是取到所有的x下面的子节点

如果遇到相对复杂的xml格式如图:

这里写图片描述

这个xml根节点为message,x为message的子节点,在x子节点的下面有image和properties两个子节点,最后在properties子节点中有很多个property这个节点且,property中都有两个子节点name和value,其中value的属性为string.

话不多说,我们现在写入部分,直接上写入代码:

午夜福利视频2020我们重点看下properties节点的写入

//创建properties节点

nsxmlelement *properties = [nsxmlelement elementwithname:@“properties"];

//设置properties节点的属性

[name addattributewithname:@"xmlns" stringvalue:@“…”];

//下面创建propery属性就要循环创建了

午夜福利视频2020nsarray *namearr//定义一个放name的数组

nsarray *valuearr//定义一个放value的数组

//循环创建节点

for (int i=0; i<10; i++) {

nsxmlelement *property=[nsxmlelement elementwithname:@"property"];

午夜福利视频2020nsxmlelement *name=[nsxmlelement elementwithname:@"name" stringvalue:namearr[i]];

nsxmlelement *value=[nsxmlelement elementwithname:@"value" stringvalue:valuearr[i]];

[value addattributewithname:@"type" stringvalue:@"string"];

[property addchild:name];

午夜福利视频2020[property addchild:value];

[properties addchild:property];

}

对于这个xml解析出来的可能需要点功夫,我们可以先思考一下,对于结构复杂的xml解析的时候,要分清层级,可以采用一层一层的解析方法,这里我们以想要取出property里面的name和value为例

思路:我们可以将每个property里面的name和value作为一个字典对象,放入数组当中

午夜福利视频2020//首先拿到x节点的内容

nsxmlelement *element=[message elementforname:@"x"];

//用数组保存x字节点的内容,这时shape里面是image和properties两个节点的内容

午夜福利视频2020nsarray *shape=[element children];

//for in 遍历整个数组,找到你想要的节点properties

午夜福利视频2020for (cxmlelement *element in shapes){

午夜福利视频2020//判断是属于xml节点的类

午夜福利视频2020if ([element iskindofclass:[nsxmlelement class]]){

//判断该节点是我们所需要的节点

if ([[element name] isequaltostring:@“properties”]){

午夜福利视频2020//创建一个数组盛放我们解析出来的所有字典对象

午夜福利视频2020nsmutablearray *sourcearray = [nsmutablearray array];

//获取我们遍历到的properties下面的所有property的节点,放在数组里

nsarray *allsubnotes=[element elementsforname:@"property"];

//遍历这个数组,用字典取出每个数据,放入sourcearray数组中

for (cxmlelement *item in allsubnotes) {

//每次循环开始的时候,说明是一个新的property节点,我们需要字典来盛放它所有的值

nsmutabledictionary *propertydic = [nsmutabledictionary dictionary];

午夜福利视频2020//得到所有name节点放入namearray,注意如果有很多的name节点就这么写,如果只有一个name节点,那可以直接用 cxmlelement *nameelement=[item elementforname:@“name”],用不加s的方法

午夜福利视频2020nsarray *namearray = [item elementsforname:@"name"];

//解析name节点

cxmlelement *nameelement = [namearray objectatindex:0];

//取出节点name的值

nsstring *name = [nameelement stringvalue];

//放入字典中

午夜福利视频2020[studentdic setobject:name forkey:@"name"];

//取出value

午夜福利视频2020nsarray *agearray = [item elementsforname:@"value"];

cxmlelement *valueelement = [agearray objectatindex:0];

nsstring *value = [valueelement stringvalue];

[studentdic setobject:value forkey:@"value"];

午夜福利视频2020//把property字典添加到数组中

午夜福利视频2020[sourcearray addobject:propertydic];

}

}

}

}

最后我们可以打印 sourcearray 这个数组,那么他的内容将是如下格式

(//由于排版问题只显示了七组,上图是有十组数据的

{

午夜福利视频2020name = wbimagefilesender;

午夜福利视频2020value = pc;

},

{

name = filetype;

value = 1;

},

{

name = server;

value = “ftp.lovejiajiao.com”;

},

{

name = port;

午夜福利视频2020value = 60001;

},

{

午夜福利视频2020name = username;

value = imftp;

},

{

午夜福利视频2020name = pwd;

value = “im.ftp.2014”;

},

{

name = path;

value = “/files/uid5902bb0000004a18desert.jpg”;

},

{

name = filename;

午夜福利视频2020value = “uid5902bb0000004a18desert.jpg”;

},

)

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复午夜福利视频2020

午夜福利视频2020相关的文章:

◎已有 0 人评论

移动技术网