第一部分 使用GDataXML寫XML文件php
/*css
<!-- 7.客戶端請求通信錄信息 -->html
<iq type="get" from="jaywon@localhost/3a5054e5" to="localhost" id="123456">node
<query xmlns="jabber:iq:roster"/>web
</iq>服務器
type 屬性,說明了該 iq 的類型爲 get,與 HTTP 相似,向服務器端請求信息ide
from 屬性,消息來源,這裏是你的 JID編碼
to 屬性,消息目標,這裏是服務器域名url
id 屬性,標記該請求 ID,當服務器處理完畢請求 get 類型的 iq 後,響應的 result 類型 iq 的 ID 與 請求 iq 的 ID 相同spa
<query xmlns="jabber:iq:roster"/> 子標籤,說明了客戶端須要查詢 roster
*/
假設我有上面這樣一段文字,須要寫成XML文件,那麼咱們能夠使用GDataXML去寫,那麼思路又是什麼呢?
思路:
/**
*使用GDataXML寫XML的思路
*
*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>
</cd>
<cd country="USA">
<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
*3.將data一次性讀取到document
*4.從document裏面拿到根節點
*5.循環遍歷子節點
*6.保存
*
*/
代碼以下:
-(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(@"%@ - %@", nodeName, nodeValue);
}
printf("\n");
}
代碼中的xpath那句表示:從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
關於xpath語法的使用,請你們參考