您的位置:首页 > 其它

XML解析

2015-11-18 16:24 316 查看
XML是一种可扩展标记语言的缩写。由元素和内容构成。

xml实例:

<?xml version="1.0" encoding="UTF-8"?>
<resp>
<city>北京</city>
<updatetime>11:35</updatetime>
<wendu>3</wendu>
<fengli>2级</fengli>
<shidu>77%</shidu>
<fengxiang>南风</fengxiang>
<sunrise_1>07:02</sunrise_1>
<sunset_1>16:56</sunset_1>
<sunrise_2/>
<sunset_2/>
</resp>


1.XML声明:

XML 版本:(
<?xml version="1.0"?>


XML的编码格式:encoding="UTF-8"?

<?xml version="1.0" encoding="UTF-8"?>


2.根元素:

<resp>
</resp>


3.元素:开始标签和结束标签

拥有内容的元素:<city>北京</city>

没有内容的元素:<city></city>

没有内容的元素简写:
<city/>


一个元素可以嵌套若干个子元素(不能出现交叉嵌套)

4.一个元素可以拥有多个属性:

<video name="小黄人 第01部" length="30" />
//video元素拥有name和length两个属性
//属性值必须用 双引号"" 或者 单引号'' 括住

//实际上,属性表示的信息也可以用子元素来表示,比如
<video>
<name>小黄人 第01部</name>
<length>30</length>
</video>


5.XML的解析有两种方式:
DOM:一次性将整个文档加载进内存,比较适合解析小文件。

SAX:从根元素开始,一个元素一个元素的解析。比较适合解析大文件。

6.苹果自带的XML解析方式:

NSXMLParser:SAX方式解析,使用简单,操作方便。

NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];//初始化xml解析器
parser.delegate = self;//设置代理
[parser parse];//开始解析(会阻塞线程)


NSXMLParser的代理:

-(void)parserDidStartDocument:(NSXMLParser *)parser{
// 当扫描到文档的开始时调用(开始解析)
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
// 当扫描到文档的结束时调用(解析完毕)
}
// 当扫描到元素的开始时调用(attributeDict存放着元素的属性)
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
//存储起始标签
startTag = elementName;

}
// 当扫描到元素的结束时调用
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

}
//当解析器得到节点,起始标签和结束标签之间的数据时会调用
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//得到标签中的数据
if ([startTag isEqualToString:@"city"]) {
NSLog(@"%@",string);
}else if ([startTag isEqualToString:@"updatetime"]){
NSLog(@"%@",string);
}else if ([startTag isEqualToString:@"fengli"]){
NSLog(@"%@",string);
}
}


7.使用第三方类库GDataXML对XML进行解析:(DOM解析方式)

用cocopad安装GDataXML后,引入头文件#import "GDataXMLNode.h",然后发起数据请求,得到相应的data数据,通过GDataXML对data数据进行处理:

GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithHTMLData:data encoding:NSUTF8StringEncoding error:nil];//加载所有xml到内存中
GDataXMLElement *rootElement = [doc rootElement];//获取根元素
NSArray *elements = [rootElement elementsForName:@"body"];//获取所有子元素
for (GDataXMLElement *ele in elements) {
//子元素
GDataXMLElement *ele1 = [[ele elementsForName:@"resp"]firstObject];
GDataXMLElement *ele2 = [[ele1 elementsForName:@"updatetime"]firstObject];

NSLog(@"%@", [ele2 stringValue]);

//如果是属性数据的话可以使用
//          NSString *wind = [ele attributeForName:@"wind"].stringValue;
//          NSString *sunrise = [ele attributeForName:@"sunrise"].stringValue;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: