利用GDataXML进行XML文件解析

GDataXML

来看GDataXML,它是一种DOM方式的解析类库。DOM实现的原理是把整个xml文档一次性读出,放在一个树型结构里。在需要的时候,查找特定节点,然后对节点进行读或写。

在使用之前呢,我们还是先从网上下载GDataXML包,里面两个文件GDataXMLNode.h和GDataXMLNode.m导入到项目中来,编译,发现报错了,这是因为GDataXML是依赖libmxl2的,我们要去项目的Target中做一些设置。

  • 找到项目的Tarfet,进入Build Phases里面的Link Binary With Libraries,点击“加号”,搜索libxml,把出现的包添加进去,这里最新版的XCode7和iOS9中,是libxml.2.2.tbd。
  • 再来到Build Settings,我们可以搜索一下,找到Header Search Paths,添加路径“/usr/include/libxml2”。
  • 再找到Other Link Flags,添加“-lxml2“
  • 还有就是如果你下载的GDataXML是不支持ARC的,那么你就要像上面那样去添加“-fno-objc-arc”,这个视你下载的GDataXML包版本而定。

再次编译,通过。

注意:用这个解析你要对你的XML文件的节点(也就是字典的键值非常了解)

代码附上:

(1)由data转为的xml文件

NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:requestUrl]];

    

    GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

    GDataXMLElement *rootElement = [xmlDoc rootElement];

    

    NSArray *first = [rootElement elementsForName:@"vd"];

    if (first.count > 0) {

        NSArray *second = [[first objectAtIndex:0] elementsForName:@"vi"];

        if (second.count > 0) {

            NSArray *third = [[second objectAtIndex:0] elementsForName:@"url"];

            if (third.count > 0) {

                targetUrl = [[third objectAtIndex:0] stringValue];

            }

        }

    }

(2)其实是一样的,这个可能会更详细一点:

- (IBAction)GDataXML:(id)sender {

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

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

    //对象初始化

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

    //获取根节点

    GDataXMLElement *rootElement = [doc rootElement];

    //获取其他节点

    NSArray *students = [rootElement elementsForName:@"student"];

    //初始化可变数组,用来显示到textView

    self.GDatatext = [[NSMutableString alloc]initWithString:@""];

    for (GDataXMLElement *student in students) {

        //获取节点属性

        GDataXMLElement *pidElement = [[student elementsForName:@"pid"] objectAtIndex:0];

        NSString *pid = [pidElement stringValue];


        GDataXMLElement *nameElement = [[student elementsForName:@"name"] objectAtIndex:0];

        NSString *name = [nameElement stringValue];

        

        GDataXMLElement *sexElement = [[student elementsForName:@"sex"] objectAtIndex:0];

        NSString *sex = [sexElement stringValue];

        

        GDataXMLElement *ageElement = [[student elementsForName:@"age"] objectAtIndex:0];

        NSString *age = [ageElement stringValue];

        

        //调整一下姿势,添加到可变长字符串~~

        NSString *t = [NSString stringWithFormat:@"学号:%@ 姓名:%@ 性别:%@ 年龄:%@\n", pid, name, sex, age];

        [self.GDatatext appendString:t];

    }

    self.textView.text = self.GDatatext;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值