利用GDataXML进行XML文件解析

来源:互联网 发布:java ee创建web项目 编辑:程序博客网 时间:2024/05/29 20:03

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 = [NSDatadataWithContentsOfURL:[NSURLURLWithString:requestUrl]];

    

    GDataXMLDocument *xmlDoc = [[GDataXMLDocumentalloc] initWithData:dataoptions:0 error:nil];

    GDataXMLElement *rootElement = [xmlDoc rootElement];

    

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

    if (first.count > 0) {

        NSArray *second = [[firstobjectAtIndex: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 = [[NSBundlemainBundle] pathForResource:@"test"ofType:@"xml"];

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

    //对象初始化

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

    //获取根节点

    GDataXMLElement *rootElement = [doc rootElement];

    //获取其他节点

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

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

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

    for (GDataXMLElement *studentin students) {

        //获取节点属性

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

        NSString *pid = [pidElement stringValue];


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

        NSString *name = [nameElement stringValue];

        

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

        NSString *sex = [sexElement stringValue];

        

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

        NSString *age = [ageElement stringValue];

        

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

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

        [self.GDatatext appendString:t];

    }

    self.textView.text = self.GDatatext;

}


0 0
原创粉丝点击