博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GData 解析Xml以及写xml到文…
阅读量:4071 次
发布时间:2019-05-25

本文共 3872 字,大约阅读时间需要 12 分钟。

原文地址:

 

// 解析网络文件

- (IBAction)networkXML:(id)sender {
    NSURL *url = [NSURL URLWithString:
                      @"
    // 创建请求
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];   
    [request setURL:url];   
    [request setHTTPMethod:@"GET"];
       
    NSHTTPURLResponse* response;   
    // 调用同步请求得到数据
    NSData* data =
        [NSURLConnection sendSynchronousRequest:request   
                              returningResponse:&response
                                          error:nil];  
    // 得到XML文本并转码
    self.xmlString =
        [[NSString alloc] initWithData:data
                              encoding: CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)];
   
    [self parseGDataXML];
   
}

// 解析本地文件

- (IBAction)localXML:(id)sender
{
    // 先将要操作的文件拷贝到Documents目录下
   
    // 得到资源文件路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"party" ofType:@"xml"];
    // 得到Documents路径
    NSString *home = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *homePath = [home stringByAppendingPathComponent:@"party.xml"];
   
    // 文件管理器
    NSFileManager *manager = [NSFileManager defaultManager];
   
    NSError *error;
    // 判断文件是否存在
    if ([manager fileExistsAtPath:homePath]) {
        // 如果存在就先删除(根据需求也可以选择什么也不做)
        //[manager removeItemAtPath:homePath error:&error];
        //[manager copyItemAtPath:path toPath:homePath error:&error];
    }else {
        // 将文件拷贝到可操作的Documents文件夹
        [manager copyItemAtPath:path toPath:homePath error:&error];
    }
   
    // 得到XML文件内容
    self.xmlString = [[NSString alloc] initWithContentsOfFile:homePath encoding:NSUTF8StringEncoding error:nil];
   
    [self parseGDataXML];
}

// GDataXML方式解析

- (void)parseGDataXML
{
    textView.text = @"";
   
    NSError *error;
    // 加载XML文件
    GDataXMLDocument *doc = [[GDataXMLDocument alloc]
                             initWithXMLString: self.xmlString
                             options:0
                             error:&error];
   
    if (doc == nil) { return; }
   
    NSLog(@"LOG=%@", [[NSString alloc] initWithData:doc.XMLData encoding:NSUTF8StringEncoding]);
   
    NSMutableString *resultString = [[NSMutableString alloc] initWithString:@"XML数据内容: \n"];
   
    // 解析
   
    // 使用XPath语法
    NSArray *partyMembers = [doc.rootElement nodesForXPath:@"//Party/Player" error:nil];
    for (GDataXMLElement *partyMember in partyMembers) {
       
        NSString *_name;
        NSString *_level;
        NSString *_class;
       
        // Name
        NSArray *names = [partyMember elementsForName:@"Name"];
        if (names.count > 0) {
            GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0];
            _name = firstName.stringValue;
        } else continue;
       
        // Level
        NSArray *levels = [partyMember elementsForName:@"Level"];
        if (levels.count > 0) {
            GDataXMLElement *firstLevel = (GDataXMLElement *) [levels objectAtIndex:0];
            _level = firstLevel.stringValue;
        } else continue;
       
        // Class
        NSArray *classes = [partyMember elementsForName:@"Class"];
        if (classes.count > 0) {
            GDataXMLElement *firstClass = (GDataXMLElement *) [classes objectAtIndex:0];
            _class = firstClass.stringValue;
           
        } else continue;
       
        [resultString appendFormat:@"Name=%@",_name ];
        [resultString appendFormat:@" Level=%@",_level ];
        [resultString appendFormat:@" Class=%@\n",_class ];
       
    }
   
    textView.text = resultString;
}

// 写文件

- (IBAction)saveXML:(id)sender {
   
    // 创建XML节点
    GDataXMLElement * partyElement = [GDataXMLNode elementWithName:@"Party"];
    GDataXMLElement * playerElement = [GDataXMLNode elementWithName:@"Player"];
    GDataXMLElement * nameElement = [GDataXMLNode elementWithName:@"Name" stringValue:@"zhang"];
    GDataXMLElement * levelElement = [GDataXMLNode elementWithName:@"Level" stringValue:@"1"];    
    GDataXMLElement * classElement = [GDataXMLNode elementWithName:@"Class" stringValue:@"Rogue"];
   
    // 创建XML层次结构
    [playerElement addChild:nameElement];
    [playerElement addChild:levelElement];
    [playerElement addChild:classElement];
    [partyElement addChild:playerElement];

    // 创建XML文件

    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithRootElement:partyElement];
    NSData *xmlData = document.XMLData;
   
    // 得到输出路径
    NSString *homePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"party.xml"];

    NSLog(@"Saving xml data to %@...", homePath);

    // 输出
    [xmlData writeToFile:homePath atomically:YES];  
}

转载地址:http://fneji.baihongyu.com/

你可能感兴趣的文章
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
Visual Studio 2010:C++0x新特性
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
Encoding Schemes
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
linux和windows内存布局验证
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
fastcgi_param 详解
查看>>