XML(SAX)和Json解析分析

2021-07-05 09:39:56 字數 3390 閱讀 3272

xml(sax)和json解析分析

一:xml解析步驟

分析:xml解析最終是通過xmlreader的物件來關聯乙個自己繼承自defaulthandler抽象類(表示乙個解析器,它是通過讀資料流中對應的標籤時觸發裡面對應的方法)。通過重寫裡面的:

//開始解析xml檔案(當讀到《檔案頭開始標籤》事件觸發,執行此方法)

public void startdocument(){};

//結束解析xml檔案(當讀到《檔案頭結束標籤》事件觸發,執行此方法)

public void enddocument(){};

//開始解析元素標籤(當讀到《標籤頭開始標籤》事件觸發,執行此方法)

public void startelement(string uri, string localname, string qname,

attributes attributes);

//結束解析元素標籤(當讀到《標籤頭開始標籤》事件觸發,執行此方法)

public void endelement(string uri, string localname, string qname){};

//解析標籤對裡面的內容,標籤對只的內容存在char 陣列中,通過判斷當前解析的標籤對的值,然後通過char陣列和對應的引數來構建字串,該字串的值就是標籤對中的內容。

public void characters(char ch, int start,

int length);

五個方法。

1:建立defaulthandler(解析器)的實現類:mysaxhandler類

public class mysaxhandler extends defaulthandler;

2:獲取xmlreader(xml資料持有的者)的物件。(有兩種方法可以獲取)

方法一:

第一步:獲取sax解析的工廠類的物件(表示是sax解析)

saxparse***ctory saxfacfactory=saxparse***ctory.newinstance();

第二步:通過sax解析工廠類的物件獲取乙個saxparser(sax解析者)的物件

saxparser parser=saxfacfactory.newsaxparser();

第三步:通過sax解析者的物件獲取xmlreader(xml資料持有者物件)

xmlreader reader=parser.getxmlreader();

方法二:

直接通過xmlreade***ctory類來建立乙個xmlreader(xml資料持有的者)的物件

xmlreader reader=xmlreade***ctory.createxmlreader();

3:通過xml資料持有者物件來關聯自己建立的解析器類

reader.setcontenthandler(new mysaxhandler());

4:通過資料持有者去解析對應的xml檔案或者xml檔案所對應的流

reader.parse(string xmlfile);

reader.parse(new inputsource(intputstream in));

二:json解析步驟:

分析:json解析只是將xml檔案換了一種表示形式,他通過乙個json物件的陣列來對應乙個xml檔案。json物件是包含在乙個{}中的,json物件中有多個鍵值對,對應著xml中的乙個標籤對和標籤對中的值。注意:json物件的值中可以內嵌多個json物件,如同xml中的標籤分層一樣。json物件鍵的屬性都是string類型別。

乙個最簡單的json型別的資料:string jsondata="[,]";

裡面對應兩個json物件:、。

當資料型別是json陣列格式時,json解析(兩種方式)的步驟如下:

第一種:通過jsonreader類來解析:

/*** 通過jsonreader解析jsion資料

* @param jsiondata 需要解析的jsion資料

* @param in 對應需要解析的資料流

* @throws ioexception

*/public void parsejsionbyreader(inputstream in) throws ioexception

if(jsonname.equals("age"))

}//結束解析當前jsonobject物件

jsonreader.endobject();

}//結束解析當前的jsonarray陣列

jsonreader.endarray();

} catch (exception e)

}第二種:通過jsonarray類來解析:

/***

* @param in對應需要解析的資料流

*/public void parsejsonbyarray(inputstream in)

} catch (jsonexception e) }

json資料端的封裝可以通過字串拼接和第三方的工具包去封裝json物件。

第一種:直接通過jsonobject物件來封裝:

情況一:jsonobject studentjsonobject = new jsonobject();

try catch (jsonexception e)

return studentjsonobject.tostring();

情況二:private static string jsontext = "";

private static string getjsoncontent2() catch (jsonexception e)

return name + " " + id + " " + phone;

} 第二種:通過jsonstringer物件來封裝:

jsonstringer jsonstringer = new jsonstringer();

try catch (jsonexception e)

return jsonstringer.tostring();

第三種:通過jsontokener物件來封裝:

private static string jsontext = "";

private static string getjsoncontent() catch (jsonexception e)

return name + " " + id + " " + phone;

}可見:三種方式都可以封裝json資料,第一種jsonobject物件封裝的資料順序雜亂,後面兩種順序一致。

所以:一般情況下使用jsonobject即可,但對於一些巢狀的json,某些jsonarray沒有key,只有value等特殊情況,則使 用jsonstringer.

最後:兩種的解析方式的與原理是一樣的,只是資料封裝的形式不同而已。

XML SAX 解析本地檔案

第一步 把檔案拖入工程中。第二步 建立乙個與這個檔案對應的model模型,在.h中宣告對應的屬性,在.m中定義兩個方法。implementationstudent 防止kvc出錯 這是為不識別的key重寫的方法 void setvalue id value forundefinedkey nsstr...

gson解析json資料分析

1.工具類 封裝json解析工具類,提供范型引數 class gsonutil.gettype return result 1 單條無巢狀json資料的解析 eg name jz age 20 1.定義資料結構類 public class person 注 這裡也可以不使用轉義字元,而用單引號 st...

UI高階 資料解析(XML解析和JSON解析)

ios資料解析主要有xml解析和json解析兩種方式,下面以本地資料的方式來說明這兩種方式 下面是一段簡單不完整的xml 草哥男24 好賤男25 你妹男40 每乙個xml檔案都有一組唯一根節點,根節點下有若干組子節點,每一組子節點又包含了三個自己的子節點 代表的是開始標籤,草哥 中間的草哥代表的是標...