微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/xml/296033.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。