• iOS 阶段学习第23天笔记(XML数据格式介绍)


    iOS学习(OC语言)知识点整理

    一、XML数据格式介绍  

    1)概念:xml是extensible markup language扩展的标记语言,一般用来表示、传输和存储数据

    2)xml与json目前使用比较广泛的两种网络传输数据格式 两者分别占比:  

       1、 json:市场上占90%,轻量级的表示数据  

       2、xml:占10%,表示数据比较复杂

    3)XML三种数据解析方法: 

     1、DOM解析:将整个xml数据加载到内存中,构造一个对象,从根结点开始一级一级的解析提取数据。缺点:如果数据大,

         比较占内存,解析比较费时。 优点:可以修改xml数据

     2、SAX解析:基于事件驱动的解析,读取xml数据的过程就是解析的过程,当读取到某个关键项(开始标记...)

          时可以进行处理。优点:解析速度快。缺点:不能修改xml数据

     3、使用第三方GData解析xml数据:  

       1)、导入第三方(GData)文件  

       2)、GData类使用了底层的libxml2库文件,需要设置头文件的搜索路径:在Build Settings中选择Header Search Paths,双击,

             点击+,添加/Usr/include/libxml2  

       3)、添加二进制库文件:在Build Phases中点击Link Binary With Libraries,点+,选择 libxml2.dylib

    4)使用GData 解析XML数据实例代码:  

     1 #import "GDataXMLNode.h"
     2 int main(int argc, const char * argv[]) {
     3 @autoreleasepool {
     4 //1、读取xml数据
     5 NSData *data=[NSData dataWithContentsOfFile:@"/Users/Shared/ftp/book.txt"];
    6 //将xml数据加载到内存中创建GDataXMLDocument对象 7 GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:data error:nil];
    8 //获取根标记 9 GDataXMLElement *root=[doc rootElement];
    10 //在标记中根据子标记的名字获取子标记(返回数组,因为只有一个books子标记) 11 GDataXMLElement *booksElement=[[root elementsForName:@"books"] firstObject];
    12 //获取books下的所有book标记(数组) 13 NSArray *bookArray=[booksElement elementsForName:@"book"];
    14 //遍历每个book标记 15 for(GDataXMLElement *book in bookArray){ 16 GDataXMLElement *nameElement=[book elementsForName:@"name"][0];
    17 //stringValue获取标记的内容字符串 18 NSLog(@"%@",[nameElement stringValue ]);
    19 //获取book标记下的auther子标记 20 GDataXMLElement *autherElement=[book elementsForName:@"auther"][0];
    21 //获取auther标记下的子标记name(只有一个) 22 GDataXMLElement *autherNameElement=[autherElement elementsForName:@"name"][0]; 23 NSLog(@"auther name:%@",[autherNameElement stringValue]);
    24 //获取book的id属性对象 25 GDataXMLNode *idNode=[book attributeForName:@"id"]; 26 //[idNode stringValue]取属性值 27 NSLog(@"id:%@",[idNode stringValue]); 28 } 29 } 30 return 0; 31 }

    5)xPath表达式:字符串表达式,快速查找某一个标记  

     1、/:表示从根标记开始解析  

     2、//:表示任意位置的标记,满足条件  

     3、./:表示当前标记  

     4、@:获取标记的属性

    6)使用xPath解析XML数据实例代码   

     1 NSData *data=[NSData dataWithContentsOfFile:path];
     2 //1、GDataXMLDocument对象
     3 GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:data error:nil];
     4  //2、获取根标记
     5  GDataXMLElement *root=[doc rootElement];
     6 
     7 //返回任意标记下的所有的book标记
     8 NSArray *bookArray=[root nodesForXPath:@"//book" error:nil];
     9 
    10 //遍历所有的book标记,每个book标记描述的一本书,需要取出封装成对象
    11 for(GDataXMLElement *book in bookArray){
    12 BookItem *item=[[BookItem alloc]init];
    13 
    14  //@"./name":返回当前(book)标记下的name标记
    15 GDataXMLElement *nameElement=[book nodesForXPath:@"./name" error:nil][0];
    16 item.name=nameElement.stringValue;
    17 
    18 //取book标记下的price标记
    19 GDataXMLElement *priceElement=[book elementsForName:@"price"][0];
    20 item.price=[priceElement stringValue];
    21 
    22 //取当前(book)标记下的auther标记下的name标记
    23 GDataXMLElement *autherNameElement=[book nodesForXPath:@"./auther/name" error:nil][0];
    24 item.autherName=[autherNameElement stringValue];
    25 
    26 //获取book结点的id属性对象,取值
    27 GDataXMLNode *idNode=[book attributeForName:@"id"];
    28 item.ID=[idNode stringValue];
    29 
    30 //取当前(book)标记的language属性对象
    31 GDataXMLNode *languageNode=[book nodesForXPath:@"./@language" error:nil][0];
    32  item.language=[languageNode stringValue];
    33 [_bookArray addObject:item];
    34 }
    35 
    36 NSArray *nameArray=[root nodesForXPath:@"//auther/name" error:nil];
    37 for(GDataXMLElement *name in nameArray){
    38 NSLog(@"name:%@",[name stringValue]);
    39 }
    40 NSLog(@"**********");
    41 
    42 //获取任意标记下的book标记,并且book中的子标记的price字符串值>100
    43 GDataXMLElement *book2=[root nodesForXPath:@"//book[price>100]" error:nil][0];
    44 NSLog(@"%@",[book2 stringValue]);
  • 相关阅读:
    PCRE
    [转]如何解决严重的拖延症
    linux系统编程:setjmp和longjmp函数用法
    AWK中几个变量
    关于fork函数
    go mod
    golang+read_file+call_shell+goroutine
    vim for galang
    Linux install go
    为Git branch 打Tag
  • 原文地址:https://www.cnblogs.com/ChinaKingKong/p/4657830.html
Copyright © 2020-2023  润新知