XML解析



 【认识XML】
     扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。格式统一,跨平台和语言,早已成为业界公认的标准。

 【XML语法】
  【1、基本术语】
    标签/节点:
        格式:<节点名> 节点值 </节点名>
                如:    <root>books</root>   
                            其中root为节点名,books为节点值

          根节点:最外层的节点称为根节点

          子节点:节点中包含的其它节点都称为该节点的子节点,
                            一级子节点也称为直接子节点。
          属性节点:
                如:<Item key="1" value="报纸"> </Item>
                             其中 key="1" 为属性节点
                            属性: key="1"
                            属性名:    key  
                            属性值:    "1"
                        
  【2、xpath语法】
            XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语    
    言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
            XPath使用路径表达式来选取 XML文档中的节点或者节点集。这些路径    
    表达式和我们在常规的电脑文件系统中看到的表达式非常相似。路径表达式是
    从一个XML节点到另一个节点、或一组节点的书面步骤顺序。

 【XML解析】
    1、系统类NSXMLParser比较繁琐
    2、第三方开源库GData常用        

        (1)导入GData库

            ————add file to   ”xml网络解析”
            底层使用系统的libxml2库, 使用的时候添加libxml2

        (2)添加libxml二进制库
            Build Phases ---> Link Binary
            添加     libxml2.dylib

        (3)设置头文件搜索路径  
            Build Setting--->header  search Path
            添加   /usr/include/libxml2

        (4)如果是arc的工程
            Build Phases ---> Compile Source File
                GDataXmlNode.m(非arc的)
                填写编译选项:-fno-objc-arc

GData 第三方库 有两种方式解析
1、获取根节点所有元素,遍历所有的子节点
2、使用xpath语法
    
http://10.0.8.8/sns/my/user_list.php?format=xml&page=1&number=100

练习:
解析XML文件【qfSNSXml.txt】要求:封装JYUser类,用于存储数据模型

GDataXMLNode : NSObject
获取当前节点的值
- (NSString *)stringValue;
//获取当前节点子节点的个数
- (NSUInteger)childCount;
//获取子节点数组
- (NSArray *)children;
//根据索引获取子节点
- (GDataXMLNode *)childAtIndex:(unsigned)index;

GDataXMLElement : GDataXMLNode
//根据节点名字获取所有的节点名为name的节点数组
- (NSArray *)elementsForName:(NSString *)name;
//获取节点的属性
- (NSArray *)attributes;
//根据属性名获取属性节点
- (GDataXMLNode *)attributeForName:(NSString *)name;

GDataXMLDocument : NSObject
//创建文档树
- (id)initWithData:(NSData *)data options:(unsigned int)mask error:(NSError **)error;
//获取跟节点
- (GDataXMLElement *)rootElement;
//根据xpath 语法 获取 指定的节点数组
- (NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error;

原文地址:https://www.cnblogs.com/rainwz/p/4589119.html