使用GDataXML生成、修改XML文档-陈棚

使用GDXML生成XML文档的步骤如下。

 1、调用GDataXMLNode的elementWithName:方法创建GDataXMLElement对象,对象作为XML文档的根元素。

 2、调用GDataXMLNode的elementWithName:方法不断创建GDataXMLElement对象(XML元素),并利用元素之间的父子关系组织这些XML元素。

 3、调用GDataXMLDocument的initWithRootElement:方法根据指定根元素来生成GDataXMLDocument对象---它代表了XML文档在内存中的形式。

 4、调用GDataXMLDocument对象的XMLData的方法获取XML文档对应的NSFata对象,调用NSData的输出方法将XML文档输出到制定文件或其他储存介质。

使用GDataXML修改XML文档的步骤如下。

 1、使用GDataXMLDocument的方法根据制定XML文档或者XML字符串来生成GDataXMLDocument对象---它代表了XML文档在内存中的形式。

 2、获取GDataXMLDocument对象的根元素,然后利用元素之间的父子关系添加资源上,删除子元素或者修改元素内容。

 3、调用GDataXMLDocument对象的XMLData的方法获取XML文档对应的NSData对象,调用NSData的输出方法将XML文档输出到指定文件或其他储存介质。

下面示例示范了如何使用XML文档保存用户添加的数据。

#import "ViewController.h"
#import "GDataXMLNode.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *idField;
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *authorField;
@property (weak, nonatomic) IBOutlet UITextField *remarkField;

@end

@implementation ViewController
- (IBAction)finishEdit:(id)sender {
    [sender resignFirstResponder];
}

- (void)viewDidLoad {
    [super viewDidLoad];
   self.xmlPath = [NSHomeDirectory() stringByAppendingPathComponent:@"/books.xml"];
}
- (IBAction)add:(id)sender {
    //获取应用界面上4个文本框内的值
    NSString* bookId = self.idField.text;
    NSString* bookName = self.nameField.text;
    NSString* author = self.authorField.text;
    NSString* remark = self.remarkField.text;
    if (bookId.length > 0 && bookName.length > 0 && author.length > 0 && remark.length > 0) {
        //使用NSFileHandle对象根据文件路劲获取到文件
        NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:self.xmlPath];
        //获取文件内容返回NSData对象
        NSData* data = [file readabilityHandler];
        //定义变量保存将要处理的XML文档对象
        GDataXMLDocument* doc;
        //定义变量保存XML文档的根元素
        GDataXMLElement* rootEle;
        //如果data存在,则表明改XML文档已经存在
        if (data) {
            //根据NSData对象初始化GDataXMLDocument对象
            doc = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
            
            //获取XML文档的根元素
            rootEle = doc.rootElement;
        }
        //如果XML文档还不存在,则需要新建XML文档
        else
        {
            //创建<books../>元素
            rootEle = [GDataXMLNode elementWithName:@"books"];
            
        }
        //创建<book.../>元素
        GDataXMLElement* bookEle = [GDataXMLNode elementWithName:@"book"];
        //创建id属性,属性值为bookid
        GDataXMLNode* attr = [GDataXMLNode attributeWithName:@"id" stringValue:bookId];
        //为<book.../>元素添加id属性
        [bookEle addAttribute:attr];
        //依次创建<title.../>,<author.../>,<remark.../>3个元素
        GDataXMLElement* titleEle = [GDataXMLNode elementWithName:@"title" stringValue:bookName];
        GDataXMLElement* authorEle = [GDataXMLNode elementWithName:@"author" stringValue:author];
        GDataXMLElement* remarkEle = [GDataXMLNode elementWithName:@"remark" stringValue:remark];
        //将<title.../>,<author.../>,<remark.../>3个元素添加到bookEle元素中
        [bookEle addChild:titleEle];
        [bookEle addChild:authorEle];
        [bookEle addChild:remarkEle];
        //将<book.../>元素添加为XML文档根元素的子元素
        [rootEle addChild:bookEle];
        //如果data不存在,即XML文档还不存在,则表明需要重新生成GDataXMLDocument对象
        if(!data)
        {
            //以指定的跟元素创建GDataXMLDocument对象
            doc = [[GDataXMLDocument alloc]initWithRootElement:rootEle];
        }
        //将GDataXMLDocument转换为NSfata后输出到指定文件中
        [doc.XMLData writeToFile:self.xmlPath atomically:YES];
        self.idField.text = nil;
        self.nameField.text = nil;
        self.authorField.text = nil;
        self.remarkField.text = nil;
        //创建并显示提示框
       [[[UIAlertView alloc]initWithTitle:@"提示" message:@"添加成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil] show];
    }else
    {
        //创建并显示提示框
        [[[UIAlertView alloc]initWithTitle:@"提示" message:@"您必须为所有信息都输入有效的值" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil] show];
        
    }
}

posted @ 2015-06-05 14:02  sixindev  阅读(1127)  评论(0编辑  收藏  举报