GDataXML之解析XML

前端之家收集整理的这篇文章主要介绍了GDataXML之解析XML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

 第一部分 使用GdataxML写XML文件

/*

<!-- 7.客户端请求通讯录信息 -->

<iq type="get" from="jaywon@localhost/3a5054e5" to="localhost" id="123456">

<query xmlns="jabber:iq:roster"/>

</iq>

type 属性,说明了该 iq 的类型为 get,与 HTTP 类似,向服务器端请求信息

from 属性,消息来源,这里是你的 JID

to 属性,消息目标,这里是服务器域名

id 属性标记该请求 ID,当服务器处理完毕请求 get 类型的 iq 后,响应的 result 类型 iq ID 请求 iq ID 相同

<query xmlns="jabber:iq:roster"/> 标签,说明了客户端需要查询 roster

*/

假设我有上面这样一段文字,需要写成XML文件,那么我们可以使用GdataxML去写,那么思路又是什么呢?

思路:

/**

*使用GdataxMLXML的思路

*

*1.创建根节点

*2.创建属性节点

*3.属性节点添加到根节点

*4.创建子节点,并把它添加到根节点

*5.根据根节点创建document对象

*6.添加xml版本与编码信息

*7.保存写好的xml

*/

代码如下:

第二部分 解析XML文件

假设服务器返回的XML数据如下:

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

<!-- 这是xml注释 -->

<catalog>

<cd country="USA">

<title>Empire Burlesque</title>

<artist>Bob Dylan</artist>

<price>10.90</price>

</cd>

<cd country="UK">

<title>Hide your heart</title>

<artist>Bonnie Tyler</artist>

<price>9.10</price>

<title>Greatest Hits</title>

<artist>Dolly Parton</artist>

<price>9.90</price>

</cd>

</catalog>

*/

需要解析出来,此时的思路又是什么了?

思路:

/**

*

*使用GdataxML解析XML的思路

*1.读取XML文件

*2.xml文件转换成NSData

*3.data一次性读取到document

*4.document里面拿到根节点

*5.循环遍历子节点

*6.保存

*/

代码如下:

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

NSData* data=[NSData dataWithContentsOfFile:filepath];

GdataxMLDocument* document=[[GdataxMLDocument alloc]initWithData:data error:nil];

GdataxMLElement* rootElement=[document rootElement];

NSArray* allNode=[rootElement children];

for (GdataxMLElement *element in allNode) {

GdataxMLNode* node=[element attributes][0];

NSString* namestring= [node name];

NSString* valueString=[node stringValue];

NSLog(@"namestring%@",namestring);

NSLog(@"valueString%@",valueString);

NSArray* Element= [element children];

for (GdataxMLElement* subElement in Element) {

NSString *nodeName = [subElement name];

NSString *nodeValue = [subElement stringValue];

NSLog(@"--- %@ ",nodeName);

NSLog(@"-%@",nodeValue);

}

}

结果如下:

第三部分 解析HTML语言

<html>

<head>

<Meta name="audience" content="webmaster">

<Meta name="robots" content="index,follow">

<Meta name="generator" content="">

<link href="css_js/reset.css" rel="stylesheet" type="text/css" />

<link href="css_js/style.css" rel="stylesheet" type="text/css">

<!--[if IE 7]>

<link rel="stylesheet" type="text/css" href="css_js/ieseven.css" />

<![endif]-->

<!--[if IE 6]>

<link rel="stylesheet" type="text/css" href="css_js/ie.css" />

<![endif]-->

<link rel="SHORTCUT ICON" href="http://www.example.com/favicon.ico" type="image/x-icon">

</head>

<body>

<p><a href="abc.PHP">1 line<br>

<b>Bold line</b></a></p>

<hr />

<p><a href="123.PHP">2 line<br />

<b>Bold line</b></p>

<hr>

<p><a href="567.PHP">3 line<br >

<b>Bold line</p>

</body>

</html>

有HTML语言如上,解析思路和解析XML语言一样

/**

*使用GdataxML解析HTML的思路

*

*1.读取HTML文件

*2.HTML文件转换成NSData

*/

代码如下:

-(void)parseHTML

{

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"html" ofType:@"html"];

NSData *htmlData = [NSData dataWithContentsOfFile:filePath];

GdataxMLDocument *document = [[GdataxMLDocument alloc] initWithHTMLData:htmlData error:NULL];

NSString *xPath = @"//a/@href";

NSArray *elementArr = [document nodesForXPath:xPath error:NULL];

for (GdataxMLElement *element in elementArr) {

NSString *nodeName = [element name];

NSString *nodeValue = [element stringValue];

NSLog(@"%@ - %@",nodeName,nodeValue);

}

}

结果如下:

第四部分 解析XML后通过xpath取文档中的节点

解析好XML文件之后,我们有时会需要从文件中取对我们有用的节点值,那么该怎么去了,答案是通过xpath.那么什么是XPath呢?

先看代码

-(void)parseXMLForXPath

{

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

NSData *xmlData = [NSData dataWithContentsOfFile:filePath];

GdataxMLDocument *document = [[GdataxMLDocument alloc] initWithData:xmlData error:NULL];

NSString *xPath = @"//price[1]";

NSArray *elementArr = [document nodesForXPath:xPath error:NULL];

for (GdataxMLElement *element in elementArr) {

NSString *nodeName = [element name];

NSString *nodeValue = [element stringValue];

NSLog(@"%@ - %@",nodeValue);

}

printf("\n");

}

代码中的xpath那句表示:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

关于xpath语法的使用,请大家参考

http://www.w3school.com.cn/xpath/xpath_syntax.asp

猜你在找的XML相关文章