Android中xml和json文件的解析和创建

本文介绍了如何在Android应用中解析和创建XML及JSON数据。详细展示了使用Java代码进行XML文件的读取、元素属性获取、创建及输出XML文档的方法;同时,也提供了JSON数据的解析与创建实例。

一)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数据


	
			//创建与输出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();
		}
		


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值