# LBXMLModel **Repository Path**: mirrors_MxABC/LBXMLModel ## Basic Information - **Project Name**: LBXMLModel - **Description**: xml convert to jsonmodel(XML parsing), jsonmodel convert to xml(xml writer) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-18 - **Last Updated**: 2026-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LBXMLModel xml 与model相互转换,达到类似YYModel使用效果, 基于[XMLReader](https://github.com/amarcadet/XMLReader)、[XMLWriter](https://github.com/ahmyi/XMLWriter)、[YYModel](https://github.com/ibireme/YYModel)修改而成 ## 安装 - cocoapods安装 ``` pod 'LBXMLModel' ``` - 手动安装 将`LBXMLModel`文件夹copy到工程 ## 调用 包含头文件 `NSObject+LBXMLModel.h` xml->model ``` NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"]; NSData *dataXML = [NSData dataWithContentsOfFile:path]; //xml ->model RootModel *model = [RootModel jsonModelWithXML:dataXML]; ``` model->xml ``` RootModel *rootModel = [[RootModel alloc]init]; //TODO: 初始化model值 NSData *xmlData = [rootModel jsonModelToXMLData:YES]; NSString* strXML = [[NSString alloc]initWithData:xmlData encoding:NSUTF8StringEncoding]; NSLog(@"%@",strXML); ``` # model定义注意事项 ## 常用xml报文格式 xml数据只是标签内容,没有标签属性,那么直接按照YYModel使用注意事项即可 如类似如下xml报文,各个标签没有属性(大部分情况都是如此),model定义只要按照YYModel要求即可 ``` 200 上传成功 page1 FILE_NAME_123.jpg titl1 titl2 ``` 对应model定义 ``` @interface NODEModel : NSObject @property (nonatomic, copy) NSString *PAGEID; @property (nonatomic, copy) NSString *FILE_NAME; @end @interface ResModel : NSObject @property (nonatomic, assign) NSInteger RESPONSE_CODE; @property (nonatomic, copy) NSString *RESPONSE_MSG; //有可能是数组的,均写成数组形式 @property (nonatomic, strong) NSArray *NODE; @property (nonatomic, strong) NSArray *TITLE; @end @interface RootModel : NSObject @property (nonatomic, strong) ResModel *root; @end ``` ``` @implementation NODEModel @end @implementation ResModel + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"NODE":[NODEModel class] }; } @end @implementation RootModel + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"root" : [ResModel class] }; } @end ``` ## 如果标签包含属性 ``` subnode 上传成功 200 titl1 titl2 subArray1 subArray3 subArray4 1、如果xml报文只是从服务器接收到用来解析(xml->jsonmodel) 1)、有标签属性,且没有标签内容(大部分情况都是如此),如上面的xml报文中的PAGE标签,那么定义 Model和json报文定义model没有区别 2)、如果有标签属性且有标签内容,如上图的TagSubARRAY,包含属性 subTitle,且有内容 subArray1,那么model需要定义字段为`NSString *tag_content_text`来表示标签内容, 也可以通过YYModel提供的mapper方法自定义名称,如下面方法修改为名称text + (NSDictionary *)modelCustomPropertyMapper { return @{@"text" : @"tag_content_text", }; } 2、如果jsonmodel需要打包成xml数据(jsonmodel->json) 1)、有标签属性,且没有标签内容(大部分情况都是如此),如上面的xml报文中的PAGE标签,定义Model 安装普通model定义外,model需要定义类方法,返回对应的属性字段 + (NSArray*)modelContainerAttributePropertys { return @[@"subTitle"]; } 2)、有标签属性,且包含标签内容 如上面xml的TagSubARRAY,包含属性 subTitle,且有内容 subArray1需要额外增加`NSArray *xml_attribute_set`,并返回对应属性的名字数组 ,可 参考下面的model定义 标签内容参数名称定义为`NSString *tag_content_text`来表示标签内容,也可以通过YYModel 提供的mapper方法自定义名称,如下面方法修改为名称text + (NSDictionary *)modelCustomPropertyMapper { return @{@"text" : @"tag_content_text", }; } ``` 如上面报文对应的model ``` //头文件 @interface PAGEModel : NSObject @property (nonatomic, copy) NSString *PAGEID; @property (nonatomic, copy) NSString *FILE_NAME; @end @interface NODEModel : NSObject @property (nonatomic, copy) NSString *SUBNODE; @property (nonatomic, strong) NSArray *PAGE; @end //既包含属性,还有标签内容 @interface TagSubARRAYModel : NSObject @property (nonatomic, copy) NSString *subTitle; @property (nonatomic, copy) NSString *text;//标签值 @end @interface TagARRAYModel : NSObject @property (nonatomic, strong) NSArray *TagSubARRAY; @end @interface ResModel : NSObject @property (nonatomic, assign) NSInteger RESPONSE_CODE; @property (nonatomic, copy) NSString *RESPONSE_MSG; //有可能是数组的,均写成数组形式 @property (nonatomic, strong) NSArray *PAGE; @property (nonatomic, strong) NSArray *NODE; @property (nonatomic, strong) NSArray *TITLE; @property (nonatomic, strong) NSArray *TagARRAY; @end @interface RootModel : NSObject @property (nonatomic, strong) ResModel *root; @end ``` ``` @implementation PAGEModel //如果只是 xml->jsonmodel,该类方法可以不用实现 + (NSArray*)modelContainerAttributePropertys { return @[@"PAGEID",@"FILE_NAME"]; } @end @implementation NODEModel + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"PAGE" : [PAGEModel class] }; } @end @implementation TagSubARRAYModel //如果只是 xml->jsonmodel,该类方法可以不用实现 + (NSArray*)modelContainerAttributePropertys { return @[@"subTitle"]; } //标签内容 字段为tag_content_text,如果想其他名称,这里mapper + (NSDictionary *)modelCustomPropertyMapper { return @{@"text" : @"tag_content_text"}; } @end @implementation TagARRAYModel + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"TagSubARRAY" : [TagSubARRAYModel class] }; } @end @implementation ResModel + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"PAGE" : [PAGEModel class],@"NODE":[NODEModel class],@"TagARRAY":[TagARRAYModel class] }; } @end @implementation RootModel + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"root" : [ResModel class] }; } @end ```