Android 传输数据通常使用xml 或者json格式的数据,在android中,提供了专门的API解析xml数据:
在代码中可以通过以下方式来解析:
生成输出json数据:
假设有languages.xml 在assets 文件夹中,内容是:
<?xml version="1.0" encoding="UTF-8"?>
<Language cat="it">
<lan id="1">
<name>JAVA</name>
<ide>Eclipse</ide>
</lan>
<lan id="2">
<name>Swift</name>
<ide>XCode</ide>
</lan>
<lan id="3">
<name>C#</name>
<ide>Visual studio</ide>
</lan>
</Language>
在代码中可以通过以下方式来解析:
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(getAssets().open("languages.xml"));
Element element = document.getDocumentElement(); //获取根节点
NodeList list = element.getElementsByTagName("lan"); //获取所有lan节点
for(int i=0;i<list.getLength();i++){
Element e = (Element)list.item(i); //代表每一个lan节点
tv.append(e.getAttribute("id")); //属性值
tv.append(e.getElementsByTagName("name").item(0).getTextContent()); //访问第0个元素
tv.append(e.getElementsByTagName("ide").item(0).getTextContent());
}
生成与输出xml数据:
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
String[] name={"JAVA","Swift","C#"};
String[] ide={"Eclipse","XCode","Visual studio"};
Document newxml = builder.newDocument();
Element languages = newxml.createElement("Languages");
languages.setAttribute("cat", "it");
for(int i =0;i<3;i++){ //创建3个lan节点 ,并添加进languages节点中
Element e = newxml.createElement("lan");
e.setAttribute("id",i+1+"");
Element n = newxml.createElement("name");
n.setTextContent(name[i]);
Element d =newxml.createElement("ide");
d.setTextContent(ide[i]);
e.appendChild(n);
e.appendChild(d);
languages.appendChild(e);
}
newxml.appendChild(languages);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty("encoding", "utf-8"); //设置属性
StringWriter sw = new StringWriter();
transformer.transform(new DOMSource(newxml),new StreamResult(sw));
sw.toString(); //返回值为xml数据
json 数据比xml 更小,更快,更易解析。
假设有tests.json 在assets 文件夹中,内容是:
{
"languages":[
{"id":1,"ide":"Eclipse","name":"JAVA"},
{"id":2,"ide":"XCode","name":"Swift"},
{"id":3,"ide":"Visual studio","name":"C#"}
],
"cat":"it"
}
解析方法是:
try {
//首先把数据读入到输入流
InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"),"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
StringBuilder sb = new StringBuilder();
while((line=br.readLine())!=null){
sb.append(line);
}
JSONObject root = new JSONObject(sb.toString());
tv1.append("cat="+root.getString("cat")+"\n");
JSONArray array =root.getJSONArray("languages");
for(int i=0;i<array.length();i++){
JSONObject object = array.getJSONObject(i);
tv1.append("id="+object.getInt("id")+"\n");
tv1.append("name="+object.getString("name")+"\n");
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
生成输出json数据:
String[] name={"JAVA","Swift","C#"};
String[] ide={"Eclipse","XCode","Visual studio"};
JSONObject root1 = new JSONObject();
root1.put("cat","it");
JSONArray array1 = new JSONArray();
for(int i=0;i<3;i++){
JSONObject lan = new JSONObject();
lan.put("id",i+1);
lan.put("name",name[i]);
lan.put("ide",ide[i]);
array1.put(lan);
}
root1.put("languages",array1);
tv2.append(root1.toString());