当前位置: 首页 > 工具软件 > gdata > 使用案例 >

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

闻人越
2023-12-01

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

{

    [super viewDidLoad];

// 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 = [[NSBundle mainBundle] pathForResource:@"xml.txt" ofType:nil];

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

    

    //<1>解析XML文件

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

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

    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error: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"];

    

}



 类似资料: