當前位置:成語大全網 - 書法字典 - ios如何解析xml演示

ios如何解析xml演示

如何在ios中解析xml文件

兩種方法:1.ios中現有的NSXMLParse類

2.Google的GDataXML也是基於libxml2的,因此在使用GDataXML之前需要導入libxml2。

以下是ios中nsxmlparse的詳細說明:

NSxmlParser實現sax方法來解析XML文件。

dom實現的原理是壹次性讀取整個xml文檔並將其放入樹結構中。必要時,找到特定的節點,然後讀取或寫入該節點。他的主要優點是簡單和讀寫平衡;缺點是占用更多內存,因為他必須將整個xml文檔讀入內存。文件越大,這種缺點越明顯。

Sax的實現不同於dom。他只在xml文檔中尋找特定條件的內容,並且只提取所需的內容。它占用內存少且靈活,正好滿足我們的需求。他的弱點是寫作。有些資料介紹了寫作的方法,但我認為這個例子沒有必要。

運行NSXMLParser包括設置、運行和響應結果。

1)啟動NSXMLParser。

要使用NSXMLParser,必須首先創建它並設置各種屬性,主要使用以下方法:

InitWithContentsOfURL通過NSURL創建壹個解析器。

InitWithData通過NSData創建壹個解析器。

SetDelegate為解析器定義壹個委托。

解析運行解析器。

擔任代表

五種最重要的方法:

//用於查找元素開頭(即報告元素開頭及其屬性)的處理程序

-(void)解析器:(NSXMLParser *)解析器

did startelement:(ns string *)element name

namespace uri:(ns string *)namespace uri

qualified name:(ns string *)qName

屬性:(ns dictionary *)attributeDict

//處理標記包含內容字符(報告元素的全部或部分內容)

-(void)解析器:(NSXMLParser *)解析器發現字符:(NSString *)字符串

//用於查找元素終止符的處理程序,它保存元素的每壹項的數據(即報告元素的結束標記)。

-(void)解析器:(NSXMLParser *)解析器

didend element:(ns string *)element name

namespace uri:(ns string *)namespace uri

qualified name:(ns string *)qName

//報告解析結束

-(void)parserdinddocument:(nsxml parser *)解析器

//報告不可恢復的解析錯誤

-(void)paser:出現解析錯誤

1.陳述了壹個xml處理協議,它使用NSxmlParser協議專門處理我們要解析的XML文件,取出所需的url並將其存儲在指定的數據中。

*/

//多線程類的定義、方法實現以及向主線程發回數據。

@ class AppRecord

//@ protocol ParseOperationDelegate;

@ protocol ParseOperationDelegate

-(void)did finish parsing:(NSArray *)appList;

-(void)parse error occurred:(NSError *)錯誤;

@end

@ interface parse operation:ns operation {

@私人

id & lt& lt/span>。ParseOperationDelegate & gt委派;//,NSXMLParserDelegate

NSData * dataToParse

NSMutableArray * workingArray

AppRecord * workingEntry

NSMutableString * working property string;

NSArray * elementsToParse

BOOL storingCharacterData

}

-(id)initWithData:(ns data *)數據委托:(id & lt& ltspan class =“s 13“& gt。ParseOperationDelegate & gt)委托人;

@end

然後完成協議的初始化功能。

-(id)initWithData:(ns data *)數據委托:(id & lt& ltspan class =“s 13“& gt。ParseOperationDelegate & gt委托人

{

self =【超級初始化】;

如果(自我!=零)

{

self.dataToParse = data

self.delegate = theDelegate

self . elements parse =【NSArray arrayWithObjects:kIDStr,kNameStr,kImageStr,kArtistStr,nil】;

}

回歸自我;

}

2.完成特定標簽的解析。

#雜註標記-

#雜註標記RSS處理

-(void)解析器:(NSXMLParser *)解析器did startelement:(ns string *)element name

namespace uri:(ns string *)namespace uri

qualified name:(ns string *)qName

屬性:(ns dictionary *)attributeDict

{

// entry: { id(鏈接),im:name(應用程序名稱),im:image(可變高度)}

//

if(【element name is qualto string:kentry str】)

{

self . working entry =【【apprecto alloc】init】auto release】;

}

storingCharacterData =【elements parse contains object:element name】;

}

3.找到具體地址和內容並存儲。

-(void)解析器:(NSXMLParser *)解析器didend element:(ns string *)element name

namespace uri:(ns string *)namespace uri

qualified name:(ns string *)qName

{

if(self . work ingentry)

{

if(storingCharacterData)

{

ns string * trimmed string =【working property string stringByTrimmingCharactersInSet:

【NSCharacterSet whitespacandnewlinecharacterset】】;

【workingPropertyString set string:@““】;//為下次清除字符串

if(【element name isEqualToString:kIDStr】)

{

self . working entry . app urlstring = trimmed string;

}

else if(【element name is equal tostring:kNameStr】)

{

self . working entry . appname = trimmed string;

}

else if(【element name isEqualToString:kImageStr】)

{

self . working entry . imageurlstring = trimmed string;

}

else if(【element name is equal tostring:kArtistStr】)

{

self . working entry . artist = trimmed string;

}

}

else if(【element name is equal tostring:kentry str】)

{

【self . working array add object:self . working entry】;

self.workingEntry = nil

}

}

}

-(void)解析器:(NSXMLParser *)解析器發現字符:(NSString *)字符串

{

if(storingCharacterData)

{

【working property string append string:string】;

}

}

第三方解決方法::::::::

簡介:由KissXML的第三方組裝實現,需要介紹libxml2.dylib。

(另請註意,運行時可能會提示“找不到libxml/tree.h”。

解決方案:在項目的目標中選擇壹個目標,切換到右側的構建設置頁面,然後向下搜索。

Paths段,其中有壹個標題搜索路徑項,其值設置為:/usr/include/libxml2),如下所示:

ProvinceCity.xml的文件格式如下:

該程序的主要代碼如下:

#導入“DDXML.h“

# import“ddxmlelementadditions . h“

@實現視圖控制器

//解析XML

staticNSString * kXML = @“//區//省“;

-(void)viewDidLoad

{

【superviewDidLoad】;

ns string * path =【【NSString galloc】init withstring:【【NSBundlemainBundle】path for resource:@“province city“of type:@“XML“】】;

ns data * data =【【ns data alloc】initwithcontentsofile:path】;

【self parseddatafromdata:dataandprovince:@“江西省”】;

【self parseddatafromdata:data】;

【數據發布】;

}

//取特定省份下的所有城市。

-(void)parsedDataFromData:(ns data *)data and province:(ns string *)province {

ddxml document * doc =【【ddxml document alloc】initWithData:data options:0 error:nil】;

////解析

NSArray * items =【docnodesForXPath:kxml error:nil】;

對於(ddxml element * objin items ){

DD xmlnode * aUser =【obj attribute for Name:@“Name“】;//取屬性名的值。

if(【auser . stringvalueisequaltostring:province】)

{

NSArray * City lst =【obj elements forname:@“City“】;//獲取城市點列表並將其保存在數組中。

if(city lst . count & gt;0)//二樓

{

for(ddxml element * city in city lst ){

DD xmlnode * city node =【city s attribute for Name:@“Name“】;

NSLog(“% @”“,city node . string value);

}

}

}

}

【文檔發布】;

}

//獲取所有省份及其下屬節點,包括修改。

-(void)parsedDataFromData:(ns data *)data {

ddxml document * doc =【【ddxml document alloc】initWithData:data options:0 error:nil】;

////解析

NSArray * items =【docnodesForXPath:kxml error:nil】;

對於(ddxml element * objin items ){

DD xmlnode * aUser =【objatributeforname:@“Name“】;//取屬性名的值。

//【aUser setStringValue:@“哈哈!”];//修改屬性節點的值

【objaddAttribute:【ddxmlnode attribute with name:@“test“string value:@“wzh“】】;//添加屬性節點

【objaddAttributeWithName:@“TTT“string value:@“343“】;//添加另壹個屬性節點。

//【obj setstring value:@“new node“】;//設置當前節點的值

DD xmlnode * new node =【DDXMLNodeelementWithName:@“new node“】;//設置新節點

【obj addChild:new node】;//向對象添加節點

ddxml element * newdxml =【【objelementsForName:@“new node“】objectAtIndex:0】;//訪問剛剛添加的節點。

【newdxmladattributewithname:@“node two“string value:@“two value“】;//向新添加的節點添加壹個額外的從屬節點,該從屬節點具有另壹個屬性值。

DD xmlnode * new node 2 =【DDXMLNodeelementWithName:@“new node 2“string value:@“hello!“];

【newdxmladchild:new node 2】;

}

//保存到沙盒目錄

ns string * path =【【NSStringalloc】initWithFormat:@“% @/XML data . XML“,【NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0】;

ns string * result =【【NSStringalloc】initWithFormat:@“% @”,doc】;

【resultwriteToFile:path atomic:yes encoding:nsu TF 8 string encoding error:nil】;

//【result 2 write tofile:path atomic:YES】;//這個方法不行,保存後會有亂碼。

【成績發布】;

【路徑釋放】;

【文檔發布】;

}