XML解析的几种方法

第一种方法系统自带的解析方法(NSXMLParser)

//1、指定XML文件

NSString *path=[[NSBundle mainBundle] pathForResource:@"person" ofType:@"xml"];

//转换成data类型对象

NSData *data=[NSData dataWithContentsOfFile:path];

//2、为parser指定初始值

NSXMLParser *parser=[[NSXMLParser alloc] initWithData:data];

//指定代理

parser.delegate=self;

//3、实现文件解析

BOOL bol=[parser parse];

//返回解析的结果

NSLog(@"%d",bol);

}

//开始解析xml文档

- (void)parserDidStartDocument:(NSXMLParser *)parser

{

//初始化集合

self.arryM=[NSMutableArray array];

NSLog(@"开始解析文档StartDocument");

}

//xml文档解析结束,输出集合的内容

- (void)parserDidEndDocument:(NSXMLParser *)parser

{

NSLog(@"结束解析文档DidEndDocument");

NSLog(@"%@",self.arryM);

}

//文档元素解析开始,attributeDict表示属性的字典

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict

{

//找到文档中user的元素,初始化字典 dictM

if ([elementName isEqualToString:@"User"])

{

//文档开始 初始化字典

self.dictM=[NSMutableDictionary dictionary];

//向字典中添加属性元素

[self.dictM setDictionary:attributeDict];

}

NSLog(@"<%@>",elementName);

}

//结束解析文档元素

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{

//判断元素的关键字,只有符合name或者age的时候才向字典中添加元素

if ([elementName isEqualToString:@"name"]||[elementName isEqualToString:@"age"])

{

//这时候dictM中已经有三对键值对啦

[self.dictM setObject:self.strM forKey:elementName];

}

//直到找到User元素标签时,才向arrM中添加字典

else if ([elementName isEqualToString:@"User"])

{

[self.arryM addObject:self.dictM];

}

NSLog(@"</%@>",elementName);

}

//解析文件元素的内容

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

//将局部的字符串赋值给全局变量的字符串

self.strM=string;

NSLog(@"%@",string);

}

第二种方法XMLDictionary解析

第三种GDataXML第三方类库的解析方法(也是解析美团接口的城市列表中的城市,纬度,经度)

使用NSdata对象初始化

GDataXMLDocument *doc=[[GDataXMLDocument alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.meituan.com/api/v1/divisions?mtt=1.help%2Fapi.0.0.im785tzf"]] options:0 error:nil];

//获取根节点

GDataXMLElement *rootelement=[doc rootElement];

//获取根节点下的节点

NSArray *User=[rootelement elementsForName:@"divisions"];

for (GDataXMLElement *user in User)

{

//获取User节点的id属性

NSString *userID=[[user attributeForName:@"id"] stringValue];

//NSLog(@"%@",userID);

//获取name节点的值

//GDataXMLElement *namelement=[[user elementsForName:@"name"]objectAtIndex:0];

NSString *name=[[[user elementsForName:@"name"]objectAtIndex:0] stringValue];

NSLog(@"%@",name);

//获取age节点的值

//GDataXMLElement *agelement=[[user elementsForName:@"age"]objectAtIndex:0];

NSString *age=[[[user elementsForName:@"location"]objectAtIndex:0] stringValue];

//NSLog(@"%@",age);

//将的到的name,age,id先放到一个字典,然后在拼接成一个集合

NSMutableDictionary *dic=[NSMutableDictionary dictionary];

[dic setObject:userID forKey:@"id"];

[dic setObject:name forKey:@"name"];

[dic setObject:age forKey:@"location"];

[self.arrM addObject:dic];

}

NSLog(@"%@",self.arrM);

}

时间: 2024-10-14 00:18:24

XML解析的几种方法的相关文章

PHP中的XML解析的5种方法

[前言]不管是桌面软件开发,还是WEB应用,XML无处不在!然而在平时的工作中,仅仅是使用一些已经封装好的类对XML对于处理,包括生成,解析等.假期有空,于是将PHP中的几种XML解析方法总结如下: 以解析Google API 接口提供的天气情况为例,我们取今天的天气及气温.API地址:http://www.google.com/ig/api?weather=shenzhen [XML文件内容] <?xml version="1.0"?> <xml_api_reply

XML解析的四种方法 建议使用demo4j解析 测试可以用

https://www.cnblogs.com/longqingyang/p/5577937.html 4.DOM4J解析  特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开放源码的文件 以下是解析代码: public class DOM4JTest { private static ArrayList<Book> bookList = new ArrayLis

Java中Xml解析(四种方法)

1.DOM,Document Object Model,基于DOM的XML分析器将XML文档转换成一个对象模型的集合(DOC树),通过对此模型操作实现对XML文档数据的操作,可以在任何时候对XML文档的任何一部分数据进行访问. DOC强制使用树模型来访问XML文档中信息 很灵活,当XML文档较大时对内存需求比较高,而且对结构复杂的DOC树的遍历也很耗时,对机器要求比较高. // step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器) DocumentBuilderFactory

Java解析XML文件的四种方法

[摘要] 可扩展标志语言(XML)在实现信息标准化.信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视.本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处.最后给出了一个简单的案例来对这四种解析进行代码介绍. [关键字] XML文件,DOM,SAX,JDOM,DOM4J [引言] XML即可扩展标记语言(EXtensible Markup Language),是标准通用标记语言的子集,是一种用于标记

IOS中Json解析的四种方法

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的ios版本,可以使用第三方库来解析Json. 本文将介绍TouchJso

PHP读写XML文件的四种方法

PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写.DOMDocument读写. XMLWrite写和XMLReader读.SimpleXML读写,本文将依次对这四种方法进行介绍. 介绍之前首先对本文例子使用的数据和文件进行说明.本文写XML文件的例子都是从MySQL中读取数据然后 写入到XML文件中,读XML文件的例子都是从XML文件中读取数据后组装成数组的格式,数组中每个元素对应数 据库中的一条记录. MySQL中的数据: XML文件: 1 2 3 4 5 6 7 8

【转】IOS中Json解析的四种方法

原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSer

android动态实例化xml布局的3种方法

在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会根据情况在代码中自定义控件,这就需要用到LayoutInflater.LayoutInflater在Android中是“扩展”的意思,作用类似于findViewById(),不同的是LayoutInflater是用来获得布局文件对象的,而 findViewById()是用来获得具体控件的.LayoutInflater经常在BaseAdapter的getView方法中用到,用来获取整个View并返回.LayoutInflater的用法有

java读取xml文件的三种方法

xml既简单又标准,值得拥有和学习,好多地方都用的到.假设有这么一个book.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Copyright w3school.com.cn --> <!-- W3School.com.cn bookstore example --> -<bookstore> -<book category="childre