如何把mark数据转换成xmlc语言数据类型转换

在线XML JSON互相转换 - aTool在线工具
JSON和XML和我们最常用的两种信息传输格式,但是有些时候,我们却需要两者之间的转换,方便我们的工作。
PRETTY JSON
JSON | JSON Introduce
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
XML | XML Introduce
XML是web中交换和传输数据中最常用的格式之一,很多的web server协议都是基于XML进行定义。
JSON和XML是web传输中常见的两种文本格式。相比JSON,XML格式严格规范,更容易传输更加复杂的数据。
在Web调试的过程中,经常需要将一行XML格式的文本格式化一下,使其更加容易阅读,从而更加便于我们调试。
在Web调试完成之后,我们可以将XML文档压缩,加快文本在网络中的传输速度,当然这一点对于加速网络传输效果有限。
JSON & XML | JSON vs XML
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
XML天生有很好的扩展性;XML有丰富的编码工具,比如Dom4j、JDom等;XML的解析方式有两种:一是通过文档模型解析,另外一种方法是遍历节点(document 以及 childNodes)。
JSON具有简单直观的格式;可以直接与JavaScript、Python等语言中的对象兼容;作为数据包格式传输的时候具有更高的效率(因为JSON不像XML有闭合标签,节省很多字节)。
推荐功能 / 猜你喜欢 | Suggest
评论 | Comments
公众号: atool-org(sleepykitty)
第三方登录:您所在的位置: &
详解iOS开发之将XML转换成树 上篇
详解iOS开发之将XML转换成树 上篇
iOS开发本文章将封装一个简单操作XML转换成树的类方便自己操作:首先通过NSXMLParser从服务端获取XML,它可以一边下载,一边解析,然后转换成树形结构,最后我们可以从树形结构中去取值。
iOS开发之将XML转换成树是本文要介绍的内容,开发中由于服务端与客户端是两种不同的平台,而且服务端又是老系统,不具备很好的面向对象的性质,所以导致客户端与服务端只好通过一些制定好的xml进行通信。
在中对XML的解析不像donet这么方便。当然也存在一些很方便的开源类库去调用,但是有些开源的类库显得很笨重。本文章将封装一个简单操作XML转换成树的类方便自己操作:首先通过NSXMLParser从服务端获取XML,它可以一边下载,一边解析,然后转换成树形结构,最后我们可以从树形结构中去取值。
使用NSXMLParser解析XML:
NSXMLParser中主要有三个委托方法来解析XML:
1、parser:didStartElement: 当解析器对象遇到xml的开始标记时,调用这个方法。
2、parser:didEndElement:当解析器对象遇到xml的结束标记时,调用这个方法。
3、parser:foundCharacters:当解析器找到开始标记和结束标记之间的字符时,调用这个方法。
了解了NSXMLParser机制。然后我们来封装解析XML的类:XMLParser。
#import&/CoreFoundation.h&& &#import&&TreeNode.h&&& &@interface&XMLParser&:&NSObject& &{&& &&&&&NSMutableArray&&&&&&*&& &}&& &+&(XMLParser&*)&sharedI&& &-&(TreeNode&*)&parseXMLFromURL:&(NSURL&*)&&& &-&(TreeNode&*)&parseXMLFromData:&(NSData*)&&& &@end&&
shareInstance使用一个单例。
调用parseXMLFromURL方法,需要一个NSURL的参数,返回我们需要的树节点。
调用parseXMLFromData方法,需要一个NSData的参数,返回我们需要的树节点。
在此之前,先定义TreeNode类:
#import&/CoreFoundation.h&& &@interface&TreeNode&:&NSObject& &{&& &&&&&TreeNode&&&&&&&&*&& &&&&&NSMutableArray&&*&& &&&&&NSString&&&&&&&&*&& &&&&&NSString&&&&&&&&*&& &}&& &@property&(nonatomic,&retain)&&&TreeNode&&&&&&&&*&& &@property&(nonatomic,&retain)&&&NSMutableArray&&*&& &@property&(nonatomic,&retain)&&&NSString&&&&&&&&*&& &@property&(nonatomic,&retain)&&&NSString&&&&&&&&*&& &@property&(nonatomic,&readonly)&BOOL&&&&&&&&&&&&isL&& &@property&(nonatomic,&readonly)&BOOL&&&&&&&&&&&&hasLeafV&& &@property&(nonatomic,&readonly)&NSArray&&&&&&&&&*&& &@property&(nonatomic,&readonly)&NSArray&&&&&&&&&*allK&& &@property&(nonatomic,&readonly)&NSArray&&&&&&&&&*uniqK&& &@property&(nonatomic,&readonly)&NSArray&&&&&&&&&*uniqAllK&& &@property&(nonatomic,&readonly)&NSArray&&&&&&&&&*&& &@property&(nonatomic,&readonly)&NSArray&&&&&&&&&*allL&& &@property&(nonatomic,&readonly)&NSString&&&&&&&&*&& &+&(TreeNode&*)&treeN&& &-&(NSString&*)&&& &-&(void)&&& &//&Leaf&Utils&& &-&(BOOL)&isL&& &-&(BOOL)&hasLeafV&& &-&(NSArray&*)&&& &-&(NSArray&*)&allL&& &//&Key&Utils&& &-&(NSArray&*)&&&& &-&(NSArray&*)&allK&&& &-&(NSArray&*)&uniqK&& &-&(NSArray&*)&uniqAllK&& &//&Search&Utils&& &-&(TreeNode&*)&objectForKey:&(NSString&*)&aK&& &-&(NSString&*)&leafForKey:&(NSString&*)&aK&& &-&(NSMutableArray&*)&objectsForKey:&(NSString&*)&aK&& &-&(NSMutableArray&*)&leavesForKey:&(NSString&*)&aK&& &-&(TreeNode&*)&objectForKeys:&(NSArray&*)&&& &-&(NSString&*)&leafForKeys:&(NSArray&*)&&& &&//&Convert&Utils&& &-&(NSMutableDictionary&*)&dictionaryForC&& &@end&&
TreeNode 实现:
#import&&TreeNode.h&&& &//&String&stripper&utility&macro&& &#define&STRIP(X)&&&&[X&stringByTrimmingCharactersInSet:[NSCharacterSet&whitespaceAndNewlineCharacterSet]]&&& &@implementation&TreeNode&& &@synthesize&&& &@synthesize&&& &@synthesize&&& &@synthesize&&& &#pragma&mark&Create&and&Initialize&TreeNodes&& &-&(TreeNode&*)&init&& &{&& &&&&&if&(self&=&[super&init])&&& &&&&&{&& &&&&&&&&&self.key&=&nil;&& &&&&&&&&&self.leafvalue&=&nil;&& &&&&&&&&&self.parent&=&nil;&& &&&&&&&&&self.children&=&nil;&& &&&&&}&& &&&&&return&&& &}&& &+&(TreeNode&*)&treeNode&& &{&& &&&&&return&[[[self&alloc]&init]&autorelease];&& &}&& &#pragma&mark&TreeNode&type&routines&& &-&(BOOL)&isLeaf&& &{&& &&&&&return&(self.children.count&==&0);&& &}&& &-&(BOOL)&hasLeafValue&& &{&& &&&&&return&(self.leafvalue&!=&nil);&& &}&& &#pragma&mark&TreeNode&data&recovery&routines&& &//&Return&an&array&of&child&keys.&No&recursion&& &-&(NSArray&*)&keys&& &{&& &&&&&NSMutableArray&*results&=&[NSMutableArray&array];&& &&&&&for&(TreeNode&*node&in&self.children)&[results&addObject:node.key];&& &&&&&return&&& &}&& &//&Return&an&array&of&child&keys&with&depth-first&recursion.&& &-&(NSArray&*)&allKeys&& &{&& &&&&&NSMutableArray&*results&=&[NSMutableArray&array];&& &&&&&for&(TreeNode&*node&in&self.children)&&& &&&&&{&& &&&&&&&&&[results&addObject:node.key];&& &&&&&&&&&[results&addObjectsFromArray:node.allKeys];&& &&&&&}&& &&&&&return&&& &}&& &-&(NSArray&*)&uniqArray:&(NSArray&*)&anArray&& &{&& &&&&&NSMutableArray&*array&=&[NSMutableArray&array];&& &&&&&for&(id&object&in&[anArray&sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)])&& &&&&&&&&&if&(![[array&lastObject]&isEqualToString:object])&[array&addObject:object];&& &&&&return&&& &}&& &//&Return&a&sorted,&uniq&array&of&child&keys.&No&recursion&& &&-&(NSArray&*)&uniqKeys&& &{&& &&&&&return&[self&uniqArray:[self&keys]];&& &}&& &//&Return&a&sorted,&uniq&array&of&child&keys.&With&depth-first&recursion&& &&-&(NSArray&*)&uniqAllKeys&& &{&& &&&&&return&[self&uniqArray:[self&allKeys]];&& &}&& &//&Return&an&array&of&child&leaves.&No&recursion&& &&-&(NSArray&*)&leaves&& &{&& &&&&&NSMutableArray&*results&=&[NSMutableArray&array];&& &&&&&for&(TreeNode&*node&in&self.children)&if&(node.leafvalue)&[results&addObject:node.leafvalue];&& &&&&&return&&& &}&& &//&Return&an&array&of&child&leaves&with&depth-first&recursion.&& &&-&(NSArray&*)&allLeaves&& &{&& &&&&&NSMutableArray&*results&=&[NSMutableArray&array];&& &&&&&for&(TreeNode&*node&in&self.children)&&& &&&&&{&& &&&&&&&&&if&(node.leafvalue)&[results&addObject:node.leafvalue];&& &&&&&&&&&[results&addObjectsFromArray:node.allLeaves];&& &&&&&}&& &&&&&return&&& &}&& &#pragma&mark&TreeNode&search&and&retrieve&routines&& &//&Return&the&first&child&that&matches&the&key,&searching&recursively&breadth&first&& &-&(TreeNode&*)&objectForKey:&(NSString&*)&aKey&& &{&& &&&&&TreeNode&*result&=&nil;&& &&&&&for&(TreeNode&*node&in&self.children)&&& &&&&&&&&&if&([node.key&isEqualToString:&aKey])&& &&&&&&&&&{&& &&&&&&&&&&&&result&=&node;&& &&&&&&&&&&&&&&& &&&&&&&&&}&& &&&&&if&(result)&return&&& &&&&&for&(TreeNode&*node&in&self.children)&& &&&&&{&& &&&&&&&&&result&=&[node&objectForKey:aKey];&& &&&&&&&&&if&(result)&&& &&&&&}&& &&&&&return&&& &}&& &//&Return&the&first&leaf&whose&key&is&a&match,&searching&recursively&breadth&first&& &&-&(NSString&*)&leafForKey:&(NSString&*)&aKey&& &{&& &&&&&TreeNode&*node&=&[self&objectForKey:aKey];&& &&&&&return&node.&& &}&& &//&Return&all&children&that&match&the&key,&including&recursive&depth&first&search.&& &&-&(NSMutableArray&*)&objectsForKey:&(NSString&*)&aKey&& &{&& &&&&&NSMutableArray&*result&=&[NSMutableArray&array];&& &&&&&for&(TreeNode&*node&in&self.children)&&& &&&&&{&& &&&&&&&&&if&([node.key&isEqualToString:&aKey])&[result&addObject:node];&& &&&&&&&&&[result&addObjectsFromArray:[node&objectsForKey:aKey]];&& &&&&&}&& &&&&&return&&& &}&& &//&Return&all&leaves&that&match&the&key,&including&recursive&depth&first&search.&& &&-&(NSMutableArray&*)&leavesForKey:&(NSString&*)&aKey&& &{&& &&&&&NSMutableArray&*result&=&[NSMutableArray&array];&& &&&&&for&(TreeNode&*node&in&[self&objectsForKey:aKey])&&& &&&&&&&&&if&(node.leafvalue)&& &&&&&&&&&&&&&[result&addObject:node.leafvalue];&& &&&&&return&&& &}&& &//&Follow&a&key&path&that&matches&each&first&found&branch,&returning&object&& &&-&(TreeNode&*)&objectForKeys:&(NSArray&*)&keys&& &&{&& &&&&&if&([keys&count]&==&0)&return&&& &&&&&NSMutableArray&*nextArray&=&[NSMutableArray&arrayWithArray:keys];&& &&&&&[nextArray&removeObjectAtIndex:0];&& &&&&&for&(TreeNode&*node&in&self.children)&& &&&&&{&& &&&&&&&&&if&([node.key&isEqualToString:[keys&objectAtIndex:0]])&& &&&&&&&&&&&&&return&[node&objectForKeys:nextArray];&& &&&&&}&& &&&&&return&&& &}&& &//&Follow&a&key&path&that&matches&each&first&found&branch,&returning&leaf&& &&-&(NSString&*)&leafForKeys:&(NSArray&*)&keys&& &{&& &&&&&TreeNode&*node&=&[self&objectForKeys:keys];&& &&&&return&node.&& &}&& &#pragma&mark&output&utilities&& &//&Print&out&the&tree&& &&-&(void)&dumpAtIndent:&(int)&indent&into:(NSMutableString&*)&outstring&& &{&& &&&&&for&(int&i&=&0;&i&&;&i++)&[outstring&appendString:@&--&];&& &&&&&[outstring&appendFormat:@&[%2d]&Key:&%@&&,&indent,&key];&& &&&&&if&(self.leafvalue)&[outstring&appendFormat:@&(%@)&,&STRIP(self.leafvalue)];&& &&&&&[outstring&appendString:@&\n&];&& &&&&&for&(TreeNode&*node&in&self.children)&[node&dumpAtIndent:indent&+&1&into:&outstring];&& &}&& &-&(NSString&*)&dump&& &{&& &&&&&NSMutableString&*outstring&=&[[NSMutableString&alloc]&init];&& &&&&&[self&dumpAtIndent:0&into:outstring];&& &&&&&return&[outstring&autorelease];&& &}&& &#pragma&mark&conversion&utilities&& &//&When&you're&sure&you're&the&parent&of&all&leaves,&transform&to&a&dictionary&& &&-&(NSMutableDictionary&*)&dictionaryForChildren&& &{&& &&&&&NSMutableDictionary&*results&=&[NSMutableDictionary&dictionary];&& &&&&&for&(TreeNode&*node&in&self.children)&& &&&&&&&&&if&(node.hasLeafValue)&[results&setObject:node.leafvalue&forKey:node.key];&& &&&&&return&&& &}&& &#pragma&mark&invocation&forwarding&& &//&Invocation&Forwarding&lets&node&act&like&array&& &&-&(id)forwardingTargetForSelector:(SEL)sel&&& &{&&& &&&&&if&([self.children&respondsToSelector:sel])&return&self.&&& &&&&&eturn&&& &}&& &//&Extend&selector&compliance&& &-&(BOOL)respondsToSelector:(SEL)aSelector&& &&{&& &&&&&if&(&[super&respondsToSelector:aSelector]&)&return&YES;&& &&&&&if&([self.children&respondsToSelector:aSelector])&return&YES;&& &&&&&return&NO;&& &}&& &//&Allow&posing&as&NSArray&class&for&children&& &-&(BOOL)isKindOfClass:(Class)aClass&& &&{&& &&&&&if&(aClass&==&[TreeNode&class])&return&YES;&& &&&&&if&([super&isKindOfClass:aClass])&return&YES;&& &&&&&if&([self.children&isKindOfClass:aClass])&return&YES;&& &&&&&return&NO;&& &}&& &#pragma&mark&cleanup&& &&-&(void)&teardown&& &{&& &&&&&for&(TreeNode&*node&in&[[self.children&copy]&autorelease])&[node&teardown];&& &&&&&[self.parent.children&removeObject:self];&& &&&&&self.parent&=&nil;&& &}&& &&-&(void)&dealloc&& &{&& &&&&&self.parent&=&nil;&& &&&&&self.children&=&nil;&& &&&&&self.key&=&nil;&& &&&&&self.leafvalue&=&nil;&& &&&&[super&dealloc];&& &}&& &@end&
从上面的代码可以看出,定义了很多方便的方法来获取数据。
1、teardown:清除所有节点
2、isLeaf:判断是否是叶子节点
3、hasLeafValue:判断节点是否有值
4、- (NSArray *) leaves:返回节点的所有一级子节点值
5、- (NSArray *) allLeaves:返回节点的所有子节点的值
6、 返回节点所有一级子节点名称。
7、 allK 返回节点所有子节点名称。
8、 uniqK返回节点一级子节点名称,不重复。
9、uniqAllK返回节点子节点名称,不重复。
10、- (TreeNode *) objectForKey:根据节点名称查询节点
11、- (NSString *) leafForKey: (NSString *) aKey:根据节点名称查询出节点的值
12、- (NSMutableArray *) objectsForKey: (NSString *) aK根据节点名称查询出所以满足条件的节点
13、- (NSMutableArray *) leavesForKey: (NSString *) aK根据节点名称查询出所以满足条件的节点的值
14、- (TreeNode *) objectForKeys: (NSArray *):根据节点名称路径查询出第一个满足条件的节点。
15、- (NSString *) leafForKeys: (NSArray *) keys 根据节点名称路径查询出第一个满足条件的节点的值。
16、- (NSMutableDictionary *) dictionaryForChildren:将树转换成dictionary树定义好了,下面实现XMLParser类:
#import&&XMLParser.h&&& &@implementation&XMLParser&& &static&XMLParser&*sharedInstance&=&nil;&& &//&Use&just&one&parser&instance&at&any&time&& &+(XMLParser&*)&sharedInstance&&& &{&& &&&&&if(!sharedInstance)&{&& &&&&&&&&&sharedInstance&=&[[self&alloc]&init];&& &&&&&}&& &&&&&return&sharedI&& &}&& &//&Parser&returns&the&tree&root.&You&may&have&to&go&down&one&node&to&the&real&results&& &-&(TreeNode&*)&parse:&(NSXMLParser&*)&parser&& &{&& &&&&stack&=&[NSMutableArray&array];&& &&&&&TreeNode&*root&=&[TreeNode&treeNode];&& &&&&&root.parent&=&nil;&& &&&&&root.leafvalue&=&nil;&& &&&&&root.children&=&[NSMutableArray&array];&& &&&&&[stack&addObject:root];&& &&&&&[parser&setDelegate:self];&& &&&&&[parser&parse];&& &&&&&[parser&release];&& &&&&&//&pop&down&to&real&root&& &&&&&TreeNode&*realroot&=&[[root&children]&lastObject];&& &&&&&root.children&=&nil;&& &&&&&root.parent&=&nil;&& &&&&&root.leafvalue&=&nil;&& &&&&&root.key&=&nil;&& &&&&&realroot.parent&=&nil;&& &&&&&return&&& &}&& &&-&(TreeNode&*)parseXMLFromURL:&(NSURL&*)&url&& &{&&&&& &&&&&TreeNode&*&& &&&&&NSAutoreleasePool&*&pool&=&[[NSAutoreleasePool&alloc]&init];&& &&&&&NSXMLParser&*parser&=&[[NSXMLParser&alloc]&initWithContentsOfURL:url];&& &&&&&results&=&[self&parse:parser];&& &&&&&[pool&drain];&& &&&&&return&&& &}&& &-&(TreeNode&*)parseXMLFromData:&(NSData&*)&data&& &{&&&&& &&&&&TreeNode&*&& &&&&&NSAutoreleasePool&*&pool&=&[[NSAutoreleasePool&alloc]&init];&& &&&&&NSXMLParser&*parser&=&[[NSXMLParser&alloc]&initWithData:data];&& &&&&&results&=&[self&parse:parser];&& &&&&&[pool&drain];&& &&&&&return&&& &}&& &//&Descend&to&a&new&element&& &&-&(void)parser:(NSXMLParser&*)parser&didStartElement:(NSString&*)elementName&namespaceURI:(NSString&*)
namespaceURI&qualifiedName:(NSString&*)qName&attributes:(NSDictionary&*)attributeDict&& &{&& &&&&&if&(qName)&elementName&=&qName;&& &&&&&TreeNode&*leaf&=&[TreeNode&treeNode];&& &&&&&leaf.parent&=&[stack&lastObject];&& &&&&&[(NSMutableArray&*)[[stack&lastObject]&children]&addObject:leaf];&& &&&&&leaf.key&=&[NSString&stringWithString:elementName];&& &&&&&leaf.leafvalue&=&nil;&& &&&&&leaf.children&=&[NSMutableArray&array];&& &&&&&[stack&addObject:leaf];&& &}&& &//&Pop&after&finishing&element&& &&-&(void)parser:(NSXMLParser&*)parser&didEndElement:(NSString&*)elementName&namespaceURI:(NSString&*)namespaceURI&qualifiedName:(NSString&*)qName&& &{&& &&&&&[stack&removeLastObject];&& &}&& &//&Reached&a&leaf&& &&-&(void)parser:(NSXMLParser&*)parser&foundCharacters:(NSString&*)string&& &{&& &&&&&if&(![[stack&lastObject]&leafvalue])&& &&&&&{&& &&&&&&&&&[[stack&lastObject]&setLeafvalue:[NSString&stringWithString:string]];&& &&&&&&&&&&& &&&&&}&& &&&&&[[stack&lastObject]&setLeafvalue:[NSString&stringWithFormat:@&%@%@&,&[[stack&lastObject]&leafvalue],&string]];&& &}&& &@end&&
使用这两个类:
下面看下我们如何使用这个类:
在iis中放下面这个xml:
&version=&1.0&&encoding=&UTF-8&&& &&& &True&& &恭喜你登录成功&& &&12:20&& &&& &1&& &1&& &0&& && &&&
使用下面代码获取web服务器上的xml,并将xml转换成树:
NSURL&*&url&=&[[NSURL&alloc]&initWithString:@&http://10.5.23.117:4444/Login.xml&];&& &&&TreeNode&*node&=&[parser&parseXMLFromURL:url];&&
获取xml中的登录结果:
view&sourceprint?NSString&*&result&=&&[node&leafForKey:@&LoginResult&];&&
类似xpath去取值:
NSArray&*path&=[[NSArray&alloc]initWithObjects:@&Right&,@&A&,nil];&&&& &NSString&*&result&=&&[node&leafForKeys:path];&&&
将xml显示在tableview上:
&@implementation&TreeBrowserController&& &@synthesize&&& &//&Each&instance&of&this&controller&has&a&separate&root,&as&& &//&descending&through&the&tree&produces&new&roots.&& &&-&(id)&initWithRoot:(TreeNode&*)&newRoot&& &{&& &&&&&if&(self&=&[super&init])&& &&&&&{&& &&&&&&&&&self.root&=&newRoot;&& &&&&&&&&&NSString&*s&=[newRoot&dump];&& &&&&&&&&&if&(newRoot.key)&self.title&=&newRoot.&& &&&&&}&& &&&&&return&&& &}&& &-&(id)initWithStyle:(UITableViewStyle)style&& &{&& &&&&&self&=&[super&initWithStyle:style];&& &&&&&if&(self)&{&& &&&&&&&&&//&Custom&initialization&& &&&&&}&& &&&&&return&&& &}&&
//&The&number&of&rows&equals&the&number&of&children&for&a&node&& &&-&(NSInteger)tableView:(UITableView&*)tableView&& &&numberOfRowsInSection:(NSInteger)section&& &{&& &&&&&return&[self.root.children&count];&& &}&& &//&Color&code&the&cells&that&can&be&navigated&through&& &&-&(UITableViewCell&*)tableView:(UITableView&*)tableView&& &&&&&&&&&cellForRowAtIndexPath:(NSIndexPath&*)indexPath&& &{&& &&&&&UITableViewCell&*cell&=&[tableView&&&&&&&&&&&&&&&&&&&&&&dequeueReusableCellWithIdentifier:@&generic&];&& &&&&&if&(!cell)&cell&=&[[[UITableViewCell&alloc]&& &&&&&&&&&&&&&&&&&&&&&&&&&initWithFrame:CGRectZero&reuseIdentifier:@&generic&]&& &&&&&&&&&&&&&&&&&&&&&&&&autorelease];&& &&&&&TreeNode&*child&=&[[self.root&children]&& &&&&&&&&&&&&&&&&&&&&&&&&objectAtIndex:[indexPath&row]];&& &&&&&//&Set&text&& &&&&&if&(child.hasLeafValue)&& &&&&&&&&&cell.textLabel.text&=&[NSString&stringWithFormat:@&%@:%@&,&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&child.key,&child.leafvalue];&& &&&&&else &&&&&&&&&cell.textLabel.text&=&child.&& &&&&&//&Set&color&& &&&&&if&(child.isLeaf)&& &&&&&&&&&cell.textLabel.textColor&=&[UIColor&darkGrayColor];&& &&&&&else& &&&&&&&&&cell.textLabel.textColor&=&[UIColor&blackColor];&& &&&&&return&&& &}&& &//&On&selection,&either&push&a&new&controller&or&show&the&leaf&value&& &&-&(void)tableView:(UITableView&*)tableView&& &didSelectRowAtIndexPath:(NSIndexPath&*)indexPath&& &&{&& &&&&&TreeNode&*child&=&& &&&&&[self.root.children&objectAtIndex:[indexPath&row]];&& &&&&&if&(child.isLeaf)&& &&&&&{&&&&&&&&&& &&&&&&&&&&& &&&&&}&& &&&&&TreeBrowserController&*tbc&=&[[[TreeBrowserController&alloc]&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&initWithRoot:child]&autorelease];&& &&&&&[self.navigationController&pushViewController:tbc&animated:YES];&& &}&& &//&These&controllers&are&ephemeral&and&need&dealloc&& &&-&(void)&dealloc&& &{&& &&&&&self.root&=&nil;&& &&&&&[super&dealloc];&& &}& &@end&&
总结:详解iOS开发之将XML转换成树的内容介绍完了,本文通过封装两个类库,可以从web上很高效获取xml,将xml转换成树形结构,可以很方便的对树进行操作。那么希望本文对你有所帮助!请继续阅读。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&&&的更多文章
移动异构计算是相对于同构计算来说的,同构计算就是使用同一个处
微软和诺基亚终于达成协议,微软将收购诺基亚设备与服
随着秋的到来,各路才子佳人渐渐开始回到学校上课。不
百度推出轻应用引起业界火热议论,收购91和推出轻应用
本书分为8章,首先介绍ASP.NET的开发技巧和重点技术,尤其针对初学者如何快速入门并掌握ASP.NET编程做了深入浅出的介绍;然后重
Windows Phone专家
Android开发专家
51CTO旗下网站把数据转换成XML格式的好处
把数据转换成XML格式的好处
编辑:www.fx114.net
本篇文章主要介绍了"把数据转换成XML格式的好处",主要涉及到把数据转换成XML格式的好处方面的内容,对于把数据转换成XML格式的好处感兴趣的同学可以参考一下。
在中文 Linux 社区中,除了讨论有关中文字体美化的问题之外,就属在 Linux 英文界面下进行中文处理的话题最热门了。得益于 Linux 良好的 i18n 特性,几乎所有的 Linux 发行版在安装之后,都可以自由地切换到任意语言的界面下进行工作。(而不似 Windows 那般,一个操作系统,居然还分成 N 种语言版本来销售。)以前在 Redhat/Fedora Core 中弄过一样的事情,不过内中流程甚为繁琐。还好在 Ubuntu 中,这件事情变得简单易行。在 Linux 英文界面下处理中文,主要需要解决两件事情。首先是中文输入法的问题,其次是中文显示(美观)的问题。在切换到英文界面之后,编辑配置文件 /etc/environment,增加或者修改相应的 locale 设置:&& LC_CTYPE=&zh_CN.UTF-8&&&& LC_NUMERIC=&en_US.UTF-8&&&& LC_TIME=&en_US.UTF-8&&&& LC_COLLATE=&en_US.UTF-8&&&& LC_MONETARY=&en_US.UTF-8&&&& LC_MESSAGES=&en_US.UTF-8&&&& LC_PAPER=&en_US.UTF-8&&&& LC_NAME=&en_US.UTF-8&&&& LC_ADDRESS=&en_US.UTF-8&&&& LC_TELEPHONE=&en_US.UTF-8&&&& LC_MEASUREMENT=&en_US.UTF-8&&&& LC_IDENTIFICATION=&en_US.UTF-8&&&& LC_ALL=&&& LANGUAGE=&en_US:en&&&& GST_ID3_TAG_ENCODING=GBK&&& LANG=en_US.UTF-8这样使得在需要使用中文的地方能够良好的表现中文,而其他地方能够展现英文。然后编辑 X 的输入法配置文件 /etc/X11/Xsession.d/95input(如果没有这个文件,就创建一个):&& export XIM=SCIM&&& export =SCIM&&& scim -d(这一步在安装 SCIM 就应该做好了的。)最后编辑字体配置文件 /etc/fonts/fonts.conf。我使用的中文字体是 Apple OS X 下的华文黑体,因而需要在此文件中定义一段:&& &!--&&&&&&& OS X Heiti&&& --&&&&&&&& &match target=&font&&&&&&&&&&&&&&&&& &test name=&family&&&&&&&&&&&&&&&&&&&&&&&&& &string&STHeiti&/string&&&&&&&&&&&&&&&& &/test&&&&&&&&&&&&&&&& &edit name=&hinting&&&&&&&&&&&&&&&&&&&&&&&&& &bool&false&/bool&&&&&&&&&&&&&&&& &/edit&&&&&&&& &/match&然后在此配置文件中找到&& &!--&&& & Mark common families with their generics so we'll get&&& & something reasonable&&& --&这么一段,在日文字体前加上你所要使用的中文字体(因为很多日文汉字也可以用来表示汉文汉字,所以如果不做这一步的话,在浏览网页的时候就会容易出现两种语言的汉字混合在一起显示的情况)。比如说 &family&Kochi Mincho&/family& 明显的是日文字体的配置,那我们就可以在此之前加上&&& &family&STHeiti&/family&的配置。之后还需要修改&& &!--&&& & Provide required aliases for standard names&&& --&下面的相应配置。修改完毕之后,重启 X Server,重新登录就 OK 了。&
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 r语言数据类型转换 的文章

 

随机推荐