一、項(xiàng)目的簡介:
“智慧藏歷”是一款將傳統(tǒng)藏歷與移動互聯(lián)網(wǎng)平臺結(jié)合的產(chǎn)品躏敢,它在以藏歷版塊為基礎(chǔ)闷愤,提供便捷詳實(shí)的藏歷信息的前提下,分階段增加氣象版塊件余、提醒版塊讥脐、資訊版塊。人們不僅能方便地從移動端獲取藏歷信息啼器、天氣信息旬渠,同時(shí)系統(tǒng)還能自動提醒用戶注意一些關(guān)鍵信息,例如藏族節(jié)日的忌禁提醒端壳、最新藏醫(yī)藥健康養(yǎng)生資訊提醒等告丢,另外用戶通過資訊版塊還能輕易地了解到藏醫(yī)藥養(yǎng)生、宗教佛語损谦、節(jié)慶日信息等最新新聞等相關(guān)信息岖免。并且在后期實(shí)現(xiàn)用戶可以通過語音模塊收聽按照季度岳颇、月、日等發(fā)送的福音或提示颅湘。
二话侧、項(xiàng)目資料分析
數(shù)據(jù)庫的數(shù)據(jù):
部分UI
拿到這個(gè)項(xiàng)目有第一反應(yīng)就是要做藏文的國際化,怎么做呢闯参?按照常規(guī)的辦法很明顯不不行瞻鹏,于是看到有藏文的xml文件,我們打開看看
<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">????????????????????</string><string name="app_name_chn">?????????????????????</string><string name="app_version">V1.1</string><string name="action_settings">Settings</string><string name="hello_world">Hello world!</string><string name="tab_home">????????</string><string name="tab_remind">?????????</string><string name="tab_news">???????????</string><string name="tab_set">???????????</string><string name="title_year_name">????????</string><string name="title_year_example">2016</string><string name="home_location">?????</string><string name="home_tibetancalendar">???????</string><string name="home_chncalendar">????????</string><string name="home_weather_fengxiang">???????????:</string><string name="home_weather_haiba">???????????????????????? ?:</string><string name="weather_detail_ziwaixian">??????????????????</string><string name="weather_detail_zhiliang">??????????????????</string><string name="weather_detail_shidu">???????????????????</string><string name="city_change_search">??????????</string><string name="back">????????</string><string name="remarks">????????</string>
看到這里就感覺簡單多了赢赊,對于藏文和中文的國際化 可以考慮用xml里面的name字段來做點(diǎn)文章乙漓,于是我封裝了這樣一個(gè)類
新建一個(gè) FJXmlToJSon的類,在FJXmlToJSon.h文件聲明以下方法
#import <Foundation/Foundation.h>
@interface FJXmlToJSon : NSObject
/**
* xml轉(zhuǎn)換為JSON
*
* @param xmlPathStr xml文件的路徑
* @param fileName xml文件的文件名(方便進(jìn)行輸出為data文件)
* @param resultDic 返回json數(shù)據(jù)
* @param resultDataPath 返回存盤的data文件
*/
- (void)xmlToJson:(NSString *)xmlPathStr fileName:(NSString *)fileName resultDic:(void(^)(NSDictionary *resultDic))resultDic resultDataPath:(void(^)(NSString *pathStr))resultDataPath;
在FJXmlToJSon.m文件里面
#import "FJXmlToJSon.h"
@interface FJXmlToJSon ()<NSXMLParserDelegate>{
NSMutableArray *valueArray;//存儲解析出所有的value
NSMutableArray *keyArray;//存儲解析出所有的key
NSMutableString *currentValue;//存儲每次解析的value
NSString *xmlFileName;//當(dāng)前解析的xml文件名
}
/**
* 返回json數(shù)據(jù)格式的block
*/
@property (weak,nonatomic)void(^resultDic)(id resultDic);
/**
* 返回data文件路徑的block
*/
@property (weak,nonatomic)void(^resultDataPath)(NSString *dataPathStr);
@end
在FJXmlToJSon.m文件里面實(shí)現(xiàn)
- (void)xmlToJson:(NSString *)xmlPathStr fileName:(NSString *)fileName resultDic:(void(^)(NSDictionary *resultDic))resultDic resultDataPath:(void(^)(NSString *pathStr))resultDataPath方法
- (void)xmlToJson:(NSString *)xmlPathStr fileName:(NSString *)fileName resultDic:(void(^)(NSDictionary *resultDic))resultDic resultDataPath:(void(^)(NSString *pathStr))resultDataPath{
valueArray = [NSMutableArray array];
keyArray = [NSMutableArray array];
currentValue = 0;
xmlFileName = fileName;
self.resultDic = resultDic;
self.resultDataPath = resultDataPath;
NSString *xmlContent=[[NSString alloc] initWithContentsOfFile:xmlPathStr encoding:NSUTF8StringEncoding error:nil];
NSXMLParser *xmlParse = [[NSXMLParser alloc]initWithData:[xmlContent dataUsingEncoding:NSUTF8StringEncoding]];
xmlParse.delegate = self;
[xmlParse parse];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
NSLog(@"%@",attributeDict);
NSArray *temp = [attributeDict allValues];
if (temp.count != 0) {
[keyArray addObject:[temp lastObject]];
}
if (currentValue != nil) {
NSLog(@"%@",currentValue);
[valueArray addObject:currentValue];
currentValue = nil;
}
currentValue = [[NSMutableString alloc]init];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[currentValue appendString:string];
NSLog(@"%@",currentValue);
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"%@",valueArray);
if (currentValue) {
[valueArray addObject:currentValue];
}
NSLog(@"%@",keyArray);
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
for (int i = 0; i < keyArray.count; i ++) {
[dic setValue:valueArray[i] forKey:keyArray[i]];
}
NSLog(@"%@",dic);
self.resultDic([dic mutableCopy]);
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dic];
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [documents stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.data",xmlFileName]];
[data writeToFile:path atomically:YES];
NSLog(@"%@",path);
self.resultDataPath(path);
}
使用方式:
把需要解析的xml文件拖入到項(xiàng)目中释移,傳入xml的文件名
FJXmlToJSon *xml = [[FJXmlToJSon alloc]init];
NSString *path=[[NSBundle mainBundle] pathForResource:@"strings藏" ofType:@"xml"];
[xml xmlToJson:path fileName:@"strings藏" resultDic:^(NSDictionary *resultDic) {
//返回轉(zhuǎn)換后的json數(shù)據(jù)
NSLog(@"%@",resultDic);
} resultDataPath:^(NSString *pathStr) {
//轉(zhuǎn)換為存盤的文件
NSLog(@"%@",pathStr);
}];
源碼下載地址 https://github.com/coolFangjun/FJXMlToJson.git
可能有朋友拿到上文中的pathStr的存盤路徑的文件不知道如何使用叭披,該文件是data文件,以下是我對這個(gè)的簡單處理聲明一個(gè)公共方法,keyStr為 <string name="app_name">????????????????????</string> xml文件中 的name字段 即app_name字段玩讳,傳入即拿到value
- (NSString *)getString:(NSString *)keyStr;
以下是實(shí)現(xiàn)的方法涩蜘,返回的是根據(jù)keyStr取出的對應(yīng)的值
- (NSString *)getString:(NSString *)keyStr{
NSString *valueStr = nil;
if ([FJShareClass share].setAPPLange == SetLangeToZangwen) {
//頁面設(shè)置為顯示藏文
NSString *file = [[NSBundle mainBundle]pathForResource:@"strings藏" ofType:@"data"];
NSDictionary *dic = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
valueStr = dic[keyStr];
}else{
//顯示中文
NSString *file = [[NSBundle mainBundle]pathForResource:@"strings" ofType:@"data"];
NSDictionary *dic = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
valueStr = dic[keyStr];
}
//過濾掉字符串中的 \n 垃圾字符,影響UI頁面排版
NSRange range = [valueStr rangeOfString:@"\n"];
if (range.location != NSNotFound) {
valueStr = [valueStr substringToIndex:range.location];
}
return valueStr;
}
業(yè)務(wù)邏輯可供參考熏纯!
1同诫、歡迎來到Biny博客!
2樟澜、留言本误窖,為留言而生。隨意吐槽吧秩贰。霹俺。留下你的主頁,還能友情互訪哦毒费!
3丙唧、專注于iOS移動端開發(fā),歡迎廣大大師們觅玻、大神們吐槽.....
4想际、歡迎友情鏈接 網(wǎng)站名:Biny博客 網(wǎng)址:http://www.Xcode.cc 描述:Biny博客是一個(gè)技術(shù)博客,文章主要包含移動互聯(lián)IOS相關(guān)內(nèi)容溪厘,記錄一些在IOS編碼過程中遇到的坑和看到大神們記錄下的經(jīng)驗(yàn),以便查閱胡本。