小知识:

     关于翻译:从事先约定好的数据结构中获取数据

解析数据分三方:提供方,解析方,格式

中分别代表:服务器,程序员,、JSON

实际开发中,程序员只需要从服务器获取数据,按照格式解析数据即可。

一、XML(可扩展标记语言)的解析方式:SAX 和DOM解析。其结构为:

          

XML数据解析 java 安全 xml格式数据解析_XML数据解析 java 安全

二、SAX解析步骤:

// 获取路径
NSStringNSBundlemainBundle] pathForResource:fileNameofType:fileType];
// 从文件中读取二进制流
NSDataNSDatadataWithContentsOfFile:filePath];
// 创建XMLParser对象
NSXMLParserNSXMLParseralloc] initWithData:data];
// 设置delegate
delegateself; 
// 开始解析
parse];

代理的几个重要方法,在此可以提取自己想要的数据     

// 遇到开标签
- (void)parser:(NSXMLParserNSStringNSStringNSStringNSDictionary *)attributeDict{
 
}
// 取值
- (void)parser:(NSXMLParserNSString *)string{
 
}
// 遇到关标签
- (void)parser:(NSXMLParserNSStringNSStringNSString *)qName{
  
}

 

三、 DOM解析(需要导入第三方类库,此类库由Google提供,后面会有附加,并且导入后要做一些修改,修改的内容 .h 文件的30~36行中有详细说明)

// 获取文件路径
NSStringNSBundlemainBundle] pathForResource:fileNameofType:fileType];
// 获取文件内容
NSStringNSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
// 转化为XMLDocument(此时文档已经解析完毕,并且转化为XMLDoucment存储,同时文档的树形结构已清晰明了)
GDataXMLDocumentGDataXMLDocumentalloc] initWithXMLString:str options:0error:nil];
    
// 方式一、不断找子节点来获取数据
// 1,获取根节点
GDataXMLElementrootElement;
// 2,获取子节点(通过children可以逐级向下找)
NSArraychildren;
方式二、使用elementForName:方法,给出一个节点的名字找到节点
获取根节点
    GDataXMLElement *rootElement = document.rootElement;
2,通过elementForName:找
NSArray];
3, 从数组中找到需要的节点
GDataXMLElement1];
4,通过elementForName:找
NSArrayelementsForName:@"sex"];
方式三、通过绝对路径查找对应的数据
nil];
// 方式四、通过相对路径查找
NSArraynodesForXPath:@"//sex"error:nil];

 

四、两种解析方式的优缺点

 解析为逐行解析数据

优点:1,逐行解析,不会一次性读入整个文档,减少内存消耗,文件损坏,对解析没有影响

缺点:逐行解析,没有办法获取文件的层级结构,获取比较繁琐

     

解析:一次性读入整个文档进行解析(原理:开标签入栈,关标签出栈)

优点:1,一次性读入整个文件时,会将数据的树形结构记录下来,有利于程序员分析数据,文件一旦出错立即发现

缺点:由于一次性读入整个文件,内存消耗较大。同时文件出错时不能解析文件