一 XML資料
1.1 XML資料介紹
XML,即可擴展標記語言(Extensible Markup Language)非常適合萬維網傳輸,提供統一方法來描述和交換獨立于應用程式或供應商的結構化資料,在互聯網上被廣泛使用,
- 傳輸資料而非顯示資料,需要自定義標簽,為純文本
- 大小寫敏感,正確的嵌套,屬性值加引號,空格保留,必須有根元素
1.2 三種決議XML方法的比較

1.3 核心代碼
- ①SAX決議類:SaxHelper.java
public class SaxHelper extends DefaultHandler {
private Person person;
private ArrayList<Person> persons;
//當前決議的元素標簽
private String tagName = null;
/**
* 當讀取到檔案開始標志是觸發,通常在這里完成一些初始化操作
*/
@Override
public void startDocument() throws SAXException {
this.persons = new ArrayList<Person>();
Log.i("SAX", "讀取到檔案頭,開始決議xml");
}
/**
* 讀到一個開始標簽時呼叫,第二個引數為標簽名,最后一個引數為屬性陣列
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("person")) {
person = new Person();
person.setId(Integer.parseInt(attributes.getValue("id")));
Log.i("SAX", "開始處理person元素~");
}
this.tagName = localName;
}
/**
* 讀到到內容,第一個引數為字串內容,后面依次為起始位置與長度
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//判斷當前標簽是否有效
if (this.tagName != null) {
String data = new String(ch, start, length);
//讀取標簽中的內容
if (this.tagName.equals("name")) {
this.person.setName(data);
Log.i("SAX", "處理name元素內容");
} else if (this.tagName.equals("age")) {
this.person.setAge(Integer.parseInt(data));
Log.i("SAX", "處理age元素內容");
}
}
}
/**
* 處理元素結束時觸發,這里將物件添加到結合中
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equals("person")) {
this.persons.add(person);
person = null;
Log.i("SAX", "處理person元素結束~");
}
this.tagName = null;
}
/**
* 讀取到檔案結尾時觸發,
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
Log.i("SAX", "讀取到檔案尾,xml決議結束");
}
//獲取persons集合
public ArrayList<Person> getPersons() {
return persons;
}
}
- ②Dom決議類:
public class DomHelper {
public static ArrayList<Person> queryXML(Context context)
{
ArrayList<Person> Persons = new ArrayList<Person>();
try {
//①獲得DOM決議器的工廠示例:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
//②從Dom工廠中獲得dom決議器
DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
//③把要決議的xml檔案讀入Dom決議器
Document doc = dbBuilder.parse(context.getAssets().open("person2.xml"));
System.out.println("處理該檔案的DomImplemention物件=" + doc.getImplementation());
//④得到檔案中名稱為person的元素的結點串列
NodeList nList = doc.getElementsByTagName("person");
//⑤遍歷該集合,顯示集合中的元素以及子元素的名字
for(int i = 0;i < nList.getLength();i++)
{
//先從Person元素開始決議
Element personElement = (Element) nList.item(i);
Person p = new Person();
p.setId(Integer.valueOf(personElement.getAttribute("id")));
//獲取person下的name和age的Note集合
NodeList childNoList = personElement.getChildNodes();
for(int j = 0;j < childNoList.getLength();j++)
{
Node childNode = childNoList.item(j);
//判斷子note型別是否為元素Note
if(childNode.getNodeType() == Node.ELEMENT_NODE)
{
Element childElement = (Element) childNode;
if("name".equals(childElement.getNodeName()))
p.setName(childElement.getFirstChild().getNodeValue());
else if("age".equals(childElement.getNodeName()))
p.setAge(Integer.valueOf(childElement.getFirstChild().getNodeValue()));
}
}
Persons.add(p);
}
} catch (Exception e) {e.printStackTrace();}
return Persons;
}
}
- ③Pull決議類:
public static ArrayList<Person> getPersons(InputStream xml)throws Exception{
//XmlPullParserFactory pullPaser = XmlPullParserFactory.newInstance();
ArrayList<Person> persons = null;
Person person = null;
// 創建一個xml決議的工廠
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 獲得xml決議類的參考
XmlPullParser parser = factory.newPullParser();
parser.setInput(xml, "UTF-8");
// 獲得事件的型別
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(parser.getName())) {
person = new Person();
// 取出屬性值
int id = Integer.parseInt(parser.getAttributeValue(0));
person.setId(id);
} else if ("name".equals(parser.getName())) {
String name = parser.nextText();// 獲取該節點的內容
person.setName(name);
} else if ("age".equals(parser.getName())) {
int age = Integer.parseInt(parser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(parser.getName())) {
persons.add(person);
person = null;
}
break;
}
eventType = parser.next();
}
return persons;
}
一 JSON資料
1.1 JSON資料介紹
- Json是什么?
JavaScript Object Natation, 一種輕量級的資料交換格式, 與XML一樣, 廣泛被采用的客戶端和服務端互動的解決方案!具有良好的可讀和便于快速撰寫的特性, - Json與XML的比較:
-
JSON和XML的資料可讀性基本相同;
-
JSON和XML同樣擁有豐富的決議手段
-
JSON相對于XML來講,資料的體積小
-
JSON與JavaScript的互動更加方便
-
JSON對資料的描述性比XML較差
-
JSON的速度要遠遠快于XML
體積小,節省流量,只是不如XML直觀,可讀性 稍微差一點而已!
-
- Json的格式規范
json一共有兩種資料結構-
一種是以 (key/value)對形式存在的無序的jsonObject物件,
一個物件以“{”(左花括號)開始,“}”(右花括號)結束,每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔,
例如:{“name”: “xiaoluo”}, 這就是一個最簡單的json物件,對于這種資料格式,key值必須要是string型別,而對于value,則可以是string、number、object、array等資料型別: -
一種資料格式就是有序的value的集合,這種形式被稱為是jsonArray,陣列是值(value)的有序集合,
一個陣列以“[”(左中括號)開始,“]”(右中括號)結束,值之間使用“,”(逗號)分隔,
例如:{[{“key11”:”value11”, “key12”:”value12”},{“key21”:”value21”},{“key31”:”value31”}]}
-
- Json決議類
- JSONObject: Json物件,可以完成Json字串與Java物件的相互轉換
- JSONArray: Json陣列,可以完成Json字串與Java集合或物件的相互轉換
- JSONStringer: Json文本構建類,這個類可以幫助快速和便捷的創建JSON text, 每個JSONStringer物體只能對應創建一個JSON text
- JSONTokener:Json決議類
- JSONException:Json例外
1.2 JSON資料決議
代碼示例:
json資料: test.json
{
"language":[
{"id":1, "ide":"Eclipse", "name":"Java"},
{"id":2, "ide":"XCode", "name":"Swift"},
{"id":3, "ide":"Visual Studio", "name":"C#"}
],
"cat":"it"
}
資料決議:
try {
InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("test.json"), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
StringBuilder stringBuilder = new StringBuilder();
while((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
bufferedReader.close();
inputStreamReader.close();
JSONObject jsonObject = new JSONObject(stringBuilder.toString());
JSONArray jsonArray = jsonObject.getJSONArray("language");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
Log.i("testjson:", "id=" + object.getInt("id"));
Log.i("testjson:", "name=" + object.getString("name"));
Log.i("testjson:", "ide=" + object.getString("ide"));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/337735.html
標籤:其他
上一篇:移動端測驗(adb命令)
