ios NSXmlparser方法 XML解析
来源:互联网 发布:网络贷款不还会怎么样 编辑:程序博客网 时间:2024/05/01 08:44
在网上查了很多这样的资料,都大差不差的简单写了下,今天我也完成了一份,内容被我简化了,主要是讲如何用吧,大家如果看了有任何的问题和见解,欢迎给我留言。
XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<config>
<star>
<categorys>
<default>
<category value="00">娱乐</category>
...
</default>
<en>
<category value="00">entertainment</category>
...
</en>
</categorys>
<genders><!-- 性别 -->
<default>
<gender value="1">男</gender>
...
</default>
<en>
<gender value="1">male</gender>
...
</en>
</genders>
<comments><!-- 评论 -->
<default><!-- 默认语言 -->
<score min="90" max="100">
<comment>&&&</comment>
...
</score>
<score min="80" max="90">
<comment>$$$</comment>
...
</score>
...
</default>
</comments>
</star>
<beauty><!-- 美丽指数 -->
<comments><!-- 评论 -->
<default><!-- 默认语言 -->
<score min="90" max="100">
<comment>&&&</comment>
...
</score>
<score min="80" max="90">
<comment>%%%</comment>
...
</score>
...
</default>
</comments>
</beauty>
</config>
XMLParser方法
NSMutableArray*parserObjects;
NSMutableDictionary*dataDict;
NSString *m_strCurrentElement;
NSMutableString *tempString;
-(id)init
{
if ([super init]){
;
}
return self;
}
- (void)parseXML:(NSData *)xmlFile parseError:(NSError **)error
{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlFile];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse]; <开始解析>
NSError *parseError = [parser parserError];
if (parseError && error) {
*error = parseError;
}
[parser release];
}
- (void)dealloc
{
[m_strCurrentElement release];
[tempString release];
[super dealloc];
}
准备解析
- (void)parserDidStartDocument:(NSXMLParser *)parser {
parserObjects = [[NSMutableArray alloc] init];
}
准备解析节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"config"]) {
[dataDict release];
dataDict = [[NSMutableDictionary alloc] initWithCapacity:0];
}
else if ([elementName isEqualToString:@"en"]){
typeFlag = TRUE;
}
else if ([elementName isEqualToString:@"default"]){
typeFlag = FALSE;
}
else if (([elementName isEqualToString:@"category"]) && (typeFlag == FALSE)) {
starTypeFlag = FALSE;
self.m_strCurrentElement = [attributeDict objectForKey:@"value"];
self.tempString = [NSMutableString string];
[typeValArray addObject:self.m_strCurrentElement];
}
else {
;
}
}
获取首尾节点间内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (m_strCurrentElement) {
[self.tempString appendString:string];
[dataDict setObject:string forKey:m_strCurrentElement];
if (typeFlag == FALSE) {
...
}
else {
...
}
}
}
解析完当前节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if (m_strCurrentElement) {
[dataDict setObject:self.tempString forKey:m_strCurrentElement];
self.m_strCurrentElement = nil;
self.tempString = nil;
}
if ([elementName isEqualToString:@"config"]) {
if (dataDict) {
[parserObjects addObject:dataDict];
}
}
}
这个XML中,有点要注意的就是,【default】【en】的子节点的名字都叫做【category】,但他们肯定不会是在同一个时候解析出来的。这下我们可以用上面蓝色部分(一个BOOL类型的变量标记一下就行了),在下面获取内容的时候也只要判断一下就OK了
- ios NSXmlparser方法 XML解析
- iOS XML解析 - NSXMLParser
- 【IOS中XML解析】NSXMLParser方法解析XML文件案例
- iOS 详解NSXMLParser方法解析XML数据方法
- IOS 详解NSXMLParser方法解析XML数据方法
- iOS 详解NSXMLParser方法解析XML数据方法
- 【ios】通过NSXMLParser解析xml
- IOS内置NSXMLParser解析xml
- iOS-XML文档解析(NSXMLParser)
- iOS SDK中使用NSXMLParser解析XML
- iOS SDK中使用NSXMLParser解析XML
- IOS用NSXMLParser实现XML解析
- ios-使用NSXMLParser解析XML文件
- iOS之NSXMLParser对XML解析
- iOS SDK中使用NSXMLParser解析XML
- iOS开发------XML原生解析(NSXMLParser篇)
- NSXMLParser解析xml
- NSXMLParser解析XML
- tiny210v2 开发板编译后烧录到开发板上遇到的问题。
- 工作流系列:论流程代理
- 如何学习一门新的编程语言? —— 在学习区刻意练习
- html边框
- Google 的秘密- PageRank 彻底解说 中文版
- ios NSXmlparser方法 XML解析
- RC4加密解密算法的简单实现
- FFMEG开发教程--(01)ffmpeg基本使用流程
- GCD实战一:使用串行队列实现简单的预加载
- 编程英雄会,不错呀!大家多参与!!
- Hibernate对对象的管理
- 对话框中
- 父窗口和所有者窗口
- Java和C# MD5