XML

XML的设计主要是用来描述⼀些信息,并且进⾏行信息的传送,与HTML不同,HTML主要用来显示信息,而XML主要用来传递信息。

XML(eXtensible Markup Language) 可扩展标记语言,计算机之间使用这些标记理解并处理各种信息,XML⽂档可以由 XML的声明开始,XML的声明描述了当前文档是一个XML文 档。


xml和json对比:

json(相对于xml的数据,轻巧,传输速率高,冗余的数据少。缺点:可读性差) 

xml(冗余的数据多,优点:可读性强,扩展性强)


一【声明】

XML声明是在文档开头,根节点之前的,可以省略。声明中包含了整个文档的信息,比如说版本,字符编码等信息。

<?xml version=”1.0” encoding=”UTF-8” ?>

这是一个XML声明,由<?xml开始到?>结束,包含了xml的版本以及编码等信息。


二【节点】(元素节点)

XML⽂档主要由节点构成。节点指的是从开始标签到结束标签,最外层叫根节点

 <title>Harry Potter</title>

这是一个XML节点,节点的标题是title,节点的内容是Harry Potter。


三【属性】

属性是使用键值形式来描述与节点相关的一些信息。属性⼀般出现在开始标记中,不能出现在结束标记中,属性值必须加引号。一个节点不能包含多个同名属性。

<title id=”27”>Harry Potter</title> 

对这个节点添加一个属性,属性名称为id,属性值为27(属性也是节点的一种,属性节点指的就是 id=”27”)


四【基本值】

又叫原子值,指的是节点的内容

1,<title>Harry Potter</title>中Harry Potter就叫基本值

2,属性值也是基本值


五【节点关系】

每个xml只有一个根节点(最外层的节点)

父:上一级节点

子:下一级节点

兄弟:同级节点

先辈:父、父的父,父的父的父。。。

后代:子、子的子、子的子的子。。。


六【操作】

//进行xml数据解析的第三方库(工作中也非常实用)

#import "GDataXMLNode.h"

(需要导入一个系统框架,添加一个文件路径)

libxml2包.....Header Search Paths中添加 /usr/include/libxml2路径


1,普通解析方法


NSString *path = [[NSBundle mainBundle] pathForResource:@"xml" ofType:@"txt"];

NSData *xmlData = [NSData dataWithContentsOfFile:path];

//创建xml解析作用的容器,使用xml格式的data

    GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:xmlData options:0 error:nil];


//取到xml数据的根节点(所有的节点都是GDataXMLElement对象

    GDataXMLElement *root = [document rootElement];


//取到root节点下名为books的子节点

    NSArray *booksArray =[root elementsForName:@"books"];


   //取到数组中的books节点

    GDataXMLElement *books = [booksArray lastObject];

    //books下面的book节点

    NSArray *bookArray = [books elementsForName:@"book"];


for (GDataXMLElement *book in bookArray) {


//拿到节点的属性,属性也是节点的一种

        NSArray *attr= book.attributes;

        //取到id属性的对象(第0个)

        GDataXMLElement *idAttr = [attr objectAtIndex:0];

        //打印属性的值

        NSLog(@"idValue:%@",idAttr.stringValue);


        NSArray *names =[book elementsForName:@"name"];

        //取到book下的name节点

        GDataXMLElement *name = [names objectAtIndex:0];

        //取到name节点的内容(<name>书名</name>

        NSLog(@"name:%@",name.stringValue);

        //取到当前节点的名称(标题)

        NSLog(@"title:%@",name.name);

        //取到整个节点

        NSLog(@"xmlstring:%@",name.XMLString);

    }



2,xpath

//xpath语句是一种对xml文档进行查找的语言,表述的是查找节点的位置


NSString *snsPath = [[NSBundle mainBundle] pathForResource:@"sns" ofType:@"txt"];

   NSString *snsString = [NSString stringWithContentsOfFile:snsPath encoding:NSUTF8StringEncoding error:nil];


//进行xml解析的一个容器,把要解析的xml字符串放到容器中,通过容器进行后续的操作

GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithXMLString:snsString options:0 error:nil];


    //userxml文档中的路径

    NSString *userPath = @"/root/user_list/user";


//根据xpath语句提供的节点的路径,取到相应的节点,放到数组中

    NSArray *users =[doc nodesForXPath:userPath error:nil];


//(所有的节点(根节点或子节点)都是GDataXMLElement类的对象)

    for (GDataXMLElement *user in users) {

        

        //users中所有节点标题为username的子节点

        NSArray *userNames = [user elementsForName:@"username"];

        GDataXMLElement *userName = [userNames objectAtIndex:0];

        

        //节点基本值

        NSLog(@"userName:%@",userName.stringValue);

    }


//双斜杠+节点名称,xpth语句,相对路径

    //拿到一个节点中所有名为totalcount的后代节点

    NSArray *totals = [doc nodesForXPath:@"//totalcount" error:nil];

    GDataXMLElement *totalCount = [totals objectAtIndex:0];

    NSLog(@"countValue:%@",totalCount.stringValue);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值