您的位置:首页 > 移动开发 > IOS开发

【iOS开发】XML解析--GData语法

2016-01-14 17:03 357 查看
GData旨在解析XML文档。


什么是 XML?

XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准
GData配置

(1)添加头文件搜索路径
Header Search Paths>/usr/include/libxml2
(2)添加二进制库
Link library ->  libxml2.dylib
(3)源文件添加编译选项
-fno-objc-arc
(4)添加头文件
 #import “GDataXMLNode.h"
语法:

- (void)viewDidLoad

{

    [superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    

    //配置XML库(配置完才能使用)

    //(1)添加头文件搜索路径

    //      Header Search Paths-> /usr/include/libxml2

    //(2)添加二进制库

    //  Link library ->  lixml2.dylib

    //(3)源文件添加编译选项

    //      -fno-objc-arc

    //(4)添加头文件

    //  #import "GDataXMLNode.h"

    

    

    

    //如何使用GData开源库解析XML文件

    //重点: 如何读取其中的数据

    

    //获取文件路径

    NSString *file = [[NSBundlemainBundle]
pathForResource:@"xml.txt"ofType:nil];

    NSData *data = [[NSDataalloc]
initWithContentsOfFile:file];

    

    //<1>解析XML文件

    //GData中把一个XML当做一个文档Document

    //注意: 这一句已经完成了解析的过程

    GDataXMLDocument *doc = [[GDataXMLDocumentalloc]
initWithData:data
options:0error:nil];

    if(doc ==
nil)

    {

        NSLog(@"解析失败!");

        return;

    }

    

    

    //<2>如何获取XML的数据?

    //实例:

    // 获取CityName结点的名字和其中的值

    // XPath语法: 快速获取某个结点

    //位置: /root/systemConfig/CityName

    NSArray *array = [doc
nodesForXPath:@"/root/systemConfig/CityName"error:nil];

    //取出其中的结点

    GDataXMLElement *element = [array
firstObject];

    //<CityName>北京</CityName>

    //获取节点名

    NSLog(@"name = %@",element.name);

    NSLog(@"value = %@",element.stringValue);

    

    

    //<3>如何获取结点的属性

    //实例: 拿到ComeChannel中两个Item的所有属性

    array = [doc nodesForXPath:@"/root/systemConfig/ComeChannel/Item"error:nil];

    NSLog(@"count = %ld",array.count);

    GDataXMLElement *item1 = array[0];

    //获取属性

    //注意: 一个结点可以有多个属性

    //  一个结点所有属性存储attributes中

    for(GDataXMLElement *attr
in item1.attributes)

    {

        //显示属性名和属性值

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

    }

    

    //<4>获取所有的Item结点(不管item在哪儿)

    // 语法//Item表示获取所有Item结点

    array = [doc nodesForXPath:@"//Item"error:nil];

    NSLog(@"item count=%ld",array.count);

    for (GDataXMLElement *element
in array) {

        NSLog(@"item-> %@",element.name);

    }

    

    //<5>获取所有名字为value的属性(而不管这个属性在哪儿)

    array = [doc nodesForXPath:@"//@value"error:nil];

    for (GDataXMLElement *element
in array) {

        NSLog(@"value-> %@",element.stringValue);

    }

    

    //<6>XML的遍历

    //获取根结点

    GDataXMLElement *root = doc.rootElement;

    NSLog(@"rootName: %@",root.name);

    //获取结点的子节点个数

    long count = root.childCount;

    //实例: 获取root的子结点

    array = root.children;

    //通过子节点的名字获取子结点

    array = [root elementsForName:@"systemConfig"];

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: