- 博客(1)
- 资源 (21)
- 收藏
- 关注
java swing文本框(密码框)没有内容时,占位显示默认信息(仿IOS)
JTextField及JPasswordField的空值处理,思路是采用图层Lable,并利用lable的无点击特性,类似ios文本框的空值默认显示。
2016-12-29
复杂XML的解析及组装
在实际的项目中,IPhone应用程序会存在很多与服务器之间的数据交互的地方,XML是首选方案。
此包可以解决XML文件的解析、对象转化为XML字符串的问题。
1 通过调用解析类,可以将XML的DATA数据转换为XmlNode对象,XmlNode以树形结构进行XML的数据封装,使用的时候按照树形结构进行数据的获取。(如有问题请留言)
XmlNode结构如下:
@interface XmlNode : NSObject {
}
@property(nonatomic,retain)NSMutableDictionary *attributes;//属性
@property(nonatomic,retain)NSMutableArray *childs;//下级子节点
@property(nonatomic,retain)NSString *name;//节点名称
@property(nonatomic,retain)NSString *value;//节点值
@property BOOL haveChilds;//是否有子节点
@property BOOL haveAttribute;//是否有属性
@property(nonatomic,retain)NSMutableString *xmlString;
-(void)addAttribute:(NSDictionary *)att;
-(void)addChild:(XmlNode *)node;
-(NSString *)getXmlString;//将此对象装换为XML字符串
-(NSString *)getNodeValue:(NSString *)nodeName;//在此节点中根据子节点名称获得子节点值
-(NSString *)getAttributeValue:(NSString *)attName;//获得此节点的属性值
@end
2 而解析器只需要调用相应的方法,传入相应的参数即可。
-(XmlNode *)getObject:(NSString *)elName xmlData:(NSData *)xmlData;//从data中获取对象,并返回封装对象XmlNode 。
-(NSMutableArray *)getList:(NSString *)elName xmlData:(NSData *)xmlData;//从DATA中获得对象集合,集合中也是XmlNode
--ps--
花了点时间重构了之前的xml与对象的转换代码,采用了新的逻辑算法。代码更加精简,并可支持包含节点的属性转换了。
之前有人说看不懂是做什么,所以写了个小UI来进行体现。
2011-10-14
Objective-c对象组装XML
【原创】转帖请注明来源,谢谢
-tag 1- 测试无内存泄露
1 创建数据对象()
NSMutableDictionary *map = [[NSMutableDictionary alloc]init];
[map setObject:@"a" forKey:@"author"];
[map setObject:@"b" forKey:@"title"];
[map setObject:@"c" forKey:@"content"];
或者
NSMutableArray *list = [[NSMutableArray alloc]init];
NSMutableDictionary *map1 = [[NSMutableDictionary alloc]init];
[map1 setObject:@"a1" forKey:@"author"];
[map1 setObject:@"b1" forKey:@"title"];
[map1 setObject:@"c1" forKey:@"content"];
[list addObject:map1];
NSMutableDictionary *map2 = [[NSMutableDictionary alloc]init];
[map2 setObject:@"a2" forKey:@"author"];
[map2 setObject:@"b2" forKey:@"title"];
[map2 setObject:@"c2" forKey:@"content"];
[list addObject:map2];
2 调用封装,声明对象名称及XML模板,组装器会根据XML模板填充数据。
XmlPackage *xmlPackage = [[XmlPackage alloc]init];
NSData *data = [xmlPackage objctPackage:map objectName:@"book1" xmlTemplateName:@"template1"];
或者
NSData *data = [xmlPackage listPackage:list objectName:@"book1" xmlTemplateName:@"template1"];
3 返回DATA
4 利用解析类解析并展现到UIView
部分代码如下:
@implementation XmlPackage
@synthesize obj;
@synthesize isList;
@synthesize xmlString;
@synthesize objectName;
@synthesize lvUp;
@synthesize root;
@synthesize buildEnd;
-(NSData *)objctPackage:(NSMutableDictionary *)object objectName:(NSString *)name xmlTemplateName:(NSString *)templateName
{
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:object];
NSData *data = [self listPackage:array objectName:name xmlTemplateName:templateName];
[array release];
return data;
}
-(NSData *)listPackage:(NSMutableArray *)objects objectName:(NSString *)name xmlTemplateName:(NSString *)templateName
{
isList = YES;
self.objectName = name;
NSString *path = [[NSBundle mainBundle] pathForResource:templateName ofType:@"xml"];
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *xmlData = [file readDataToEndOfFile];
NSXMLParser *xmlRead = [[NSXMLParser alloc] initWithData:xmlData];
[xmlRead setDelegate:self];
[xmlRead parse];
[xmlRead release];
//get dataTemplate
for (int i=0;i<[objects count]; i++) {
NSMutableDictionary *map = [objects objectAtIndex:i];
XmlNode *node = [[[XmlNode alloc]init]autorelease];
node.nodeName = objectName;
[node addChildByMap:map];
[lvUp addChildNode:node];
}
//get root's xmlString
NSMutableString *x = [self.root getXmlString];
//NSLog(@"%@",x);
if ((int)[x length]>0) {
return [x dataUsingEncoding:NSUTF8StringEncoding];
}
return nil;
}
- (void)dealloc
{
[obj release];
[xmlString release];
[objectName release];
[lvUp release];
//[root release];
[super dealloc];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:objectName]) {
buildEnd = YES;
}else{
if (!buildEnd) {
//create node
XmlNode *node = [[XmlNode alloc]init];
node.nodeName = elementName;
//dataTemplate building...
if (lvUp!=nil) {
[lvUp addChildNode:node];
}else{
root = node;
}
lvUp = node;
}
}
}
@end
=====
#import "XmlNode.h"
@implementation XmlNode
@synthesize nodeName;
@synthesize nodeValue;
@synthesize isLast;
@synthesize list;
@synthesize xmlString;
- (void)dealloc
{
[nodeName release];
[nodeValue release];
[list release];
[xmlString release];
[super dealloc];
}
-(NSString *)getXmlString
{
xmlString = [[NSMutableString alloc]init];
[xmlString appendString:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"];
[self getNodeStr:self string:xmlString];
return xmlString;
}
-(void)getNodeStr:(XmlNode *)node string:(NSMutableString *)str
{
if (node.isLast) {
NSString *res = [[NSString alloc]initWithFormat:@"<%@>%@</%@>",
node.nodeName,
node.nodeValue,
node.nodeName];
[str appendString:res];
[res release];
}else{
NSMutableString *a = [[[NSMutableString alloc]init]autorelease];
NSMutableArray *nodelist = [node getChilds];
for (int i=0;i<[nodelist count];i++) {
XmlNode *node = [nodelist objectAtIndex:i];
[node getNodeStr:node string:a];
}
NSString *res = [[NSString alloc]initWithFormat:@"<%@>%@</%@>",
node.nodeName,
a,
node.nodeName];
[str appendString:res];
[res release];
}
}
-(void)addChildNode:(XmlNode *)node;
{
if (list==nil) {
list = [[NSMutableArray alloc]init];
}
[list addObject:node];
isLast = NO;
}
-(NSMutableArray *)getChilds
{
return list;
}
-(void)addChildByMap:(NSMutableDictionary *)map
{
NSEnumerator *keys = [map keyEnumerator];
id key;
while (key = [keys nextObject]) {
XmlNode *node = [[[XmlNode alloc]init]autorelease];
node.isLast = YES;
node.nodeName = key;
node.nodeValue = [map objectForKey:key];
[self addChildNode:node];
}
}
@end
2011-10-12
Objective-c解析XML封装
1 获取XML的数据DATA
2 调用解析类,提供对象名。
3 返回NSMutableDictionary或者NSMutableArray,键值封装。
示例见最后的注释。
XML封装类待续。。。
转载请注明来源,谢谢
======
XmlResolve.h
#import <Foundation/Foundation.h>
@interface XmlResolve : NSObject {
}
@property (nonatomic, retain)NSString *objName;
@property BOOL *isList;
@property (nonatomic, retain) NSMutableString *currentResult;
@property (nonatomic, retain) NSMutableDictionary *map;
@property (nonatomic, retain) NSMutableArray *list;
-(NSMutableDictionary *)getObject:(NSString *)elName xmlData:(NSData *)xmlData;
-(NSMutableArray *)getList:(NSString *)elName xmlData:(NSData *)xmlData;
@end
---
XmlResolve.m
#import "XmlResolve.h"
@implementation XmlResolve
@synthesize objName;
@synthesize isList;
@synthesize currentResult;
@synthesize map;
@synthesize list;
********0..........
2011-09-29
javaswing教程
javaswing教程
swing入门教程
swing简介(2009-04-20 23:52:40)
UI 组件简介
在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”。但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高级的定义。
…………………………
2011-06-24
Hibernate缓存
Hibernate缓存的资料
Hibernate缓存机制对Hibernate的性能发挥一直处于一个极其重要的作用,它是持久层性能提升的关键。
hibernate缓存在应用系统中的位置
Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。 其作用是减少访问数据库的频率,从而提高应用的运行性能。
Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命中”),则就直接把命中的数据作为结果加以利用,避免的了建立数据库查询的性能损耗。
……………………
2011-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人