今天自己的任务是xml解析,其实网上有很多xml解析的类库,自己也不知道该选择哪一个好,最终选择touchXml解析xml感觉比较方便。下面介绍给大家。
一、首先要做的就是导入这个类库了。下载地址:https://github.com/TouchCode/TouchXML ,下载后导入到项目中。
二、导入Frameworks。libxml2.dylib添加到项目中。
三、在项目中配置。
点击项目右上方自己的项目,然后选择target下面的项目名字,选择Build Settings 后在窗口的搜索栏中输入 header search.然后双击
Header Search Paths 后面空白中输入/usr/include/libxml2
在搜索框中输入other linker flags 。添加上字符-lxml2。然后command +B编译,success。
四、xml解析。这里网上的代码很多,粘贴过来个例子吧。用到的时候需要导入 #import "TouchXML.h"
解析的源文件:
<books>
<iphonebook>
<id>01</id>
<name>iPhoneDeveloper's</name>
<page>123</page>
</iphonebook>
<iphonebook>
<id>02</id>
<name>ipadDeveloper's</name>
<page>220</page>
</iphonebook>
<wp7book>
<id>03</id>
<name>wp7developer</name>
<page>281 </page>
</wp7book>
<wp7book>
<id>04</id>
<name>windows phone 7</name>
<page>300</page>
</wp7book>
</books>- (void)viewDidLoad
{
//获得文件路径
NSString *XMLPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"userInfo.xml"];
//取得数据
NSData *XMLData = [NSData dataWithContentsOfFile:XMLPath];
//生成CXMLDocument对象
CXMLDocument *document = [[CXMLDocument alloc] initWithData:XMLData options:0 error:nil ];
}
//直接查找
- (void) parseDire:(CXMLDocument *) document
{
NSArray *books = NULL;
books = [document nodesForXPath:@"//iphonebook" error:nil];
for (CXMLElement *element in books)
{
if ([element isKindOfClass:[CXMLElement class]])
{
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
for (int i = 0; i < [element childCount]; i++)
{
if ([[[element children] objectAtIndex:i] isKindOfClass:[CXMLElement class]])
{
[item setObject:[[element childAtIndex:i] stringValue]
forKey:[[element childAtIndex:i] name]
];
NSLog(@"%@", [[element childAtIndex:i] stringValue]);
}
}
//NSLog(@"%@", item);
}
}
//
books = [document nodesForXPath:@"//wp7book" error:nil];
for (CXMLElement *element in books)
{
if ([element isKindOfClass:[CXMLElement class]])
{
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
for (int i = 0; i < [element childCount]; i++)
{
if ([[[element children] objectAtIndex:i] isKindOfClass:[CXMLElement class]])
{
[item setObject:[[element childAtIndex:i] stringValue]
forKey:[[element childAtIndex:i] name]
];
NSLog(@"%@", [[element childAtIndex:i] stringValue]);
}
}
//NSLog(@"%@", item);
}
}
}
//从根节点解析
- (void) parseRoot:(CXMLDocument *) document
{
CXMLElement *root = [document rootElement];
NSArray *books = [root children];
for (CXMLElement *element in books)
{
if ([element isKindOfClass:[CXMLElement class]])
{
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
for (int i = 0; i < [element childCount]; i++)
{
if ([[[element children] objectAtIndex:i] isKindOfClass:[CXMLElement class]])
{
if ([[element name] isEqualToString:@"iphonebook"])
{
[item setObject:[[element childAtIndex:i] stringValue] forKey:[[element childAtIndex:i] name]];
NSLog(@"1%@", [[element childAtIndex:i] stringValue] );
}
if ([[element name] isEqualToString:@"wp7book"])
{
[item setObject:[[element childAtIndex:i] stringValue] forKey:[[element childAtIndex:i] name]];
NSLog(@"2%@", [[element childAtIndex:i] stringValue] );
}
}
}
//NSLog(@"%@", item);
}
}
}