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檔案都有一組唯一根節點,根節點下有若干組子節點,每一組子節點又包含了三個自己的子節點 代表的是開始標籤,草哥 中間的草哥代表的是標...