Android XML和JSON数据的处理

Android 传输数据通常使用xml 或者json格式的数据,在android中,提供了专门的API解析xml数据:


假设有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());




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值