B9-kissXML的简单使用

一、kissXML的github地址

     https://github.com/robbiehanson/KissXML

二、使用前注意⚠

     项目要导入libxml2.dylib。另运行时提示"libxml/tree.h"找不到,需要在项目的Build Settings搜索Header S,将Header Search Paths项设置为:/usr/include/libxml2。

三、kissXML的简单使用

   1、xml文件如下:

   2、几个方法使用举例

#import"DDXML.h"

#import"DDXMLElementAdditions.h"

@implementation ViewController

//解析XML

staticNSString *kXML =@"//District//Province";
- (void)viewDidLoad
{
    [super viewDidLoad];

   NSString *path =[[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"ProvinceCity" ofType:@"xml"]]
NSData
*data = [[NSData alloc] initWithContentsOfFile:path]; [self parsedDataFromData:data andProvince:@"江西省"]; [self parsedDataFromData:data]; } //取特定省份下包含所有城市 -(void)parsedDataFromData:(NSData *)data andProvince:(NSString *)province{ DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:data options:0error:nil]; /////解析 NSArray *items = [docnodesForXPath:kXMLerror:nil]; for (DDXMLElement *objin items) { DDXMLNode *aUser = [obj attributeForName:@"Name"];//取属性Name的值 if ([aUser.stringValueisEqualToString:province]) { NSArray *CityLst = [obj elementsForName:@"City"];//取城市点点列表,保存到数组中 if(CityLst.count>0)//第二层 { for (DDXMLElement *citysin CityLst) { DDXMLNode *citynode=[citys attributeForName:@"Name"]; NSLog(@"%@",citynode.stringValue); } } } } } //取所有省份及其下级节点,包含修改操作 - (void)parsedDataFromData:(NSData *)data{ DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:data options:0 error:nil]; /////解析 NSArray *items = [doc nodesForXPath:kXML error:nil]; for (DDXMLElement *obj in items) { DDXMLNode *aUser = [obj attributeForName:@"Name"];//取属性Name的值 //[aUser setStringValue:@"haha!"];//修改属性节点的值 [obj addAttribute:[DDXMLNodeattributeWithName:@"test"stringValue:@"wzh"]];//增加一个属性节点 [obj addAttributeWithName:@"ttt"stringValue:@"343"];//再增加一个属性节点 //[obj setStringValue:@"NewNode"];//设置当前节点的值 DDXMLNode *newnode=[DDXMLNode elementWithName:@"newNode"];//设置一个新的节点 [obj addChild:newnode];//给obj添加一个节点 DDXMLElement *newdxml = [[obj elementsForName:@"newNode"] objectAtIndex:0];//访问刚刚添加的节点 [newdxml addAttributeWithName:@"nodetwo"stringValue:@"twovalue"];//给刚添加的节点增加增的下级节点,并且下级节点再一个属性值 DDXMLNode *newnode2=[DDXMLNode elementWithName:@"newNode2" stringValue:@"hello!"]; [newdxmladdChild:newnode2]; } //保存到沙盒目录下 NSString *path =[[NSStringalloc]initWithFormat:@"%@/xmlData.xml", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0]]; NSString *result=[[NSStringalloc]initWithFormat:@"%@",doc]; [resultwriteToFile:pathatomically:YESencoding:NSUTF8StringEncoding error:nil]; }

四、补充,如何把资源文件放到documents目录下。(未验证)

    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DATABASE_FILENAME];
    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:DATABASE_FILENAME];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        ////NSAssert1(0, @"Failed to create writable database file with message '%@'.", DATABASE_FILENAME );
    } 
 
 
 
原文地址:https://www.cnblogs.com/yaann/p/4346037.html