一)xml文件的解析和读取
注意xml文件里面元素和标签的定义以及根元素的理解。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView) findViewById(R.id.tv);
try {
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
org.w3c.dom.Document document=builder.
parse(getAssets().open("language.xml"));
Element element=document.getDocumentElement(); //获取根元素
NodeList nodeList=element.getElementsByTagName("lan");//根据标签名字来获取元素
for (int i = 0; i <nodeList.getLength(); i++) {
Element lan=(Element) nodeList.item(i);
text.append(lan.getAttribute("id")+"\n");//获取标签的属性
text.append(lan.getElementsByTagName("name").item(0).getTextContent()+"\n"); //获取子元素的标签内容
text.append(lan.getElementsByTagName("ide").item(0).getTextContent()+"\n");
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
//创建与输出xml数据
org.w3c.dom.Document newxml=builder.newDocument(); //创建新的document对象
Element language=newxml.createElement("Languages");
language.setAttribute("cat", "it");
Element lan1=newxml.createElement("lan");
lan1.setAttribute("id","1"); //设置属性值
Element name1=newxml.createElement("name");//设置子标签
name1.setTextContent("Java");//设置子标签内容
Element ide1=newxml.createElement("ide");
ide1.setTextContent("Eclipse");
lan1.appendChild(name1);
lan1.appendChild(ide1);
language.appendChild(lan1);
Element lan2=newxml.createElement("lan");//创建子标签
lan2.setAttribute("id","2"); //设置属性值
Element name2=newxml.createElement("name");//设置子标签
name2.setTextContent("Swift");//设置子标签内容
Element ide2=newxml.createElement("ide");
ide2.setTextContent("Xcode");
lan2.appendChild(name2);
lan2.appendChild(ide2);
language.appendChild(lan2);
newxml.appendChild(language);
//想把它们显示出来,需要转换成字符串类型
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));
text.setText(sw.toString());
三)解析json数据
现在大多数接口数据默认的返回数据都是json格式,这里我们先自己创建了后缀为json格式的文件,然后对其进行解析。
try {
InputStream in=getAssets().open("test.json");
InputStreamReader isr=new InputStreamReader(in,"utf-8");
BufferedReader bfr=new BufferedReader(isr);
StringBuilder builder=new StringBuilder();
String line;
if ((line=bfr.readLine())!=null) {
builder.append(line);
}
JSONObject root=new JSONObject(builder.toString());
System.out.println(root.getString("cat"));
JSONArray array=root.getJSONArray("language");
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject=array.getJSONObject(i);
System.out.println(jsonObject.getInt("id"));
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getString("ide"));
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}可以看到,我们使用了JsonObject方式来解析,对于数组格式的数据要通过JsonArray来取出。
四)创建JSON数据
//创建新的json数据
try {
JSONObject root=new JSONObject();
root.put("cat","it");
JSONObject lan1=new JSONObject();
lan1.put("id",1);
lan1.put("ide","Eclipse");
lan1.put("name", "Java");
JSONObject lan2=new JSONObject();
lan2.put("id",2);
lan2.put("name","Swift");
lan2.put("ide", "Xcode");
JSONObject lan3=new JSONObject();
lan3.put("id",3);
lan3.put("ide","Visual Studio");
lan3.put("name", "C#");
JSONArray array=new JSONArray();
array.put(lan1);
array.put(lan2);
array.put(lan3);
root.put("language", array);
System.out.println(root.toString());
} catch (JSONException e) {
e.printStackTrace();
}
本文介绍了如何在Android应用中解析和创建XML及JSON数据。详细展示了使用Java代码进行XML文件的读取、元素属性获取、创建及输出XML文档的方法;同时,也提供了JSON数据的解析与创建实例。
1231

被折叠的 条评论
为什么被折叠?



