Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mxabc/lbxmlmodel
xml convert to jsonmodel(XML parsing), jsonmodel convert to xml(xml writer)
https://github.com/mxabc/lbxmlmodel
jsonmodel model xml xmlmodel
Last synced: 3 months ago
JSON representation
xml convert to jsonmodel(XML parsing), jsonmodel convert to xml(xml writer)
- Host: GitHub
- URL: https://github.com/mxabc/lbxmlmodel
- Owner: MxABC
- License: mit
- Created: 2021-01-17T07:22:11.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-03-15T02:10:41.000Z (almost 4 years ago)
- Last Synced: 2024-10-10T22:21:16.497Z (4 months ago)
- Topics: jsonmodel, model, xml, xmlmodel
- Language: Objective-C
- Homepage:
- Size: 125 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
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
```