加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

GDataXML之解析XML

发布时间:2020-12-16 08:53:24 所属栏目:百科 来源:网络整理
导读:? ? 第一部分 使用GDataXML写XML文件 /* !-- 7. 客户端请求通讯录信息 -- iq type="get" from="jaywon@localhost/3a5054e5" to="localhost" id="123456" query xmlns="jabber:iq:roster"/ /iq type 属性,说明了该 iq 的类型为 get ,与 HTTP 类似,向服务器

?? 第一部分 使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读