使用第三方DOM解析XML文件

第一步:引入动态库
使用第三方DOM解析XML文件_第1张图片
第二步:拖入第三方文件
第三放文件网址 https://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/
根据文件的的要求在工程中添加相应的字段

// libxml includes require that the target Header Search Paths contain
//
// /usr/include/libxml2
//
使用第三方DOM解析XML文件_第2张图片

// and Other Linker Flags contain
//
// -lxml2
使用第三方DOM解析XML文件_第3张图片
这时引入的文件是MRC的,让其能在ARC的环境下运行需要更改设置
使用第三方DOM解析XML文件_第4张图片
需要更改单个文件是否采用ARC来进行编译有两种情况,我们的实际情况就应用到了下面的第二种

两种情况
1.自己的旧项目没有使用ARC,但是引入的第三方库却是使用了ARC的。
2.自己的新项目使用了ARC,但是引入的第三方库或者以前写的代码却没有使用ARC。

这两种情况下,直接肯定是通不过编译的。可以通过升级旧项目,让其使用ARC来解决,但这个办法有时候会很麻烦。
有一个简单的办法就是,可以指定单个文件是否采用ARC来进行编译。
方法就是在Build Phase里面的Compile Source里面找到需要特殊处理的文件,加上编译选项(Compiler Flags),具体针对上面两种情况有所区别。

1.对于第一个情况,给采用了ARC的源文件,添加-fobjc-arc选项
2.对于第二种情况,添加-fno-objc-arc

准备工作已完成,这时可以就可以根据xml文件解析数据了

// 1. 获取文件的路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentInfo_xml" ofType:@"txt"];
    // 2.根据路径获取data类型的数据
    NSData *data = [NSData dataWithContentsOfFile:path];
    // 初始化数组
    self.dataArray = [NSMutableArray array];
    // 3.设置DOM解析
    NSError *error = nil;
    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
    // 4.获取根节点
    GDataXMLElement *rootElement = document.rootElement;
    // 5.遍历获取相对应的子节点
    for (GDataXMLElement *studentElement in rootElement.children) {
        Student *stu = [Student new];
        // 遍历子节点的子节点
        for (GDataXMLElement *stuElement in studentElement.children) {
// NSLog(@"stuElement = %@", stuElement);
            // 根据标签给student对象赋值
            // stuElement.name相当于标签的名字
            // stuElement.stringValue标签
            // kvc
            [stu setValue:stuElement.stringValue forKey:stuElement.name];
        }

        // 在子循环的时候添加到数组
        [self.dataArray addObject:stu];
    }

    // 遍历检验

    for (Student *stu in self.dataArray) {
        NSLog(@"name = %@, sex = %@, age = %@, hobby = %@", stu.name, stu.sex, stu.age, stu.hobby);
    }

你可能感兴趣的:(xml)