Android——获取和输出XML数据文件

来源:互联网 发布:地方台直播软件 编辑:程序博客网 时间:2024/04/30 02:26

XML(ExtentsibleMarkup Language)是一种可扩展标记语言,主要用于存取数据,关于xml和html 的区别可详细查看XML与HTML的区别

本文主要介绍在android中如果获取xml中的内容:
首先在Android studio IDE下为项目创建一个assets文件夹,如果遇到问题请参考android studio 下打开assets的文件

然后在里面创建一个data.xml文件,内容如下:

<language cat="it">    <lan id="1">        <name>c#</name>        <ide>Visual Studio</ide>    </lan>    <lan id="2">        <name>java</name>        <ide>eclipse</ide>    </lan>    <lan id="3">        <name>android</name>        <ide>android Studio</ide>    </lan></language>

根节点为language,有一个属性cat=“it”
然后下面添加了三个lan结点,里面存了name和ide

接下来回到MainActivity.jav中来读取xml

首先打开data.xml

InputStream in=getResources().getAssets().open("data.xml");//方法返回的是一个输入流,用于读取数据

然后要用到一个类Document类(org.w3c.dom包)

 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();            DocumentBuilder documentBuilder=dbf.newDocumentBuilder();            Document document=documentBuilder.parse(in);

接下来对document进行操作读取数据

NodeList nodeList=document.getElementsByTagName("language");//根节点只有一个所以,可以Element root=nodeList.item(0);//获得根节点的属性,加入到textView中tv.append(root.getAttribute("cat").toString()+"\n");//获得根节点的子节点NodeList subNodeList=root.getElementsByTagName("lan");//循环取出数据 for(int i=0;i<subNodeList.getLength();i++){                Element lan= (Element) subNodeList.item(i);                tv.append("<lan id=\""+lan.getAttribute("id")+"\">");                Element name= (Element) //获得name标签,并用getTextContent()取得文本lan.getElementsByTagName("name").item(0);                tv.append("<name>"+name.getTextContent()+"</name>"+"\n");                Element ide= (Element) lan.getElementsByTagName("ide").item(0);                tv.append("<ide>"+ide.getTextContent()+"</ide>"+"\n");            }

运行如图:
这里写图片描述

然后接着来生成与输出XML

try {//先新建一个空的document            Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();            //根节点            Element language = document.createElement("language");            language.setAttribute("cat", "it");            //创建子节点            Element lan1 = document.createElement("lan");            lan1.setAttribute("id", "1");//设置属性            Element name1 = document.createElement("name");            Element ide1 = document.createElement("ide");            name1.setTextContent("c#");//设置内容            ide1.setTextContent("visual studio");            lan1.appendChild(name1);//加入到父节点下面            lan1.appendChild(ide1);            language.appendChild(lan1);            Element lan2 = document.createElement("lan");            lan2.setAttribute("id", "2");            Element name2 = document.createElement("name");            Element ide2 = document.createElement("ide");            name2.setTextContent("c#");            ide2.setTextContent("visual studio");            lan2.appendChild(name2);            lan2.appendChild(ide2);            language.appendChild(lan2);            Element lan3 = document.createElement("lan");            lan3.setAttribute("id", "3");            Element name3 = document.createElement("name");            Element ide3 = document.createElement("ide");            name3.setTextContent("c#");            ide3.setTextContent("visual studio");            lan3.appendChild(name3);            lan3.appendChild(ide3);            language.appendChild(lan3);            //将根节点加入到document            document.appendChild(language);            //利用Trandform进行转换            TransformerFactory tf = TransformerFactory.newInstance();            Transformer transformer = tf.newTransformer();            transformer.setOutputProperty("encoding", "utf-8");//设置输出参数            StringWriter sw=new StringWriter();//创建一个输出流            transformer.transform(new DOMSource(document),new StreamResult(sw));//参数为源和输出,使用DOMSource(Node)和StreamResult(Writer)            tv.append(sw.toString());        } catch (TransformerConfigurationException e) {            e.printStackTrace();        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (TransformerException e) {            e.printStackTrace();        }

结果如图:

这里写图片描述

如果要写入到内存卡

File file = Environment.getExternalStorageDirectory();            File data = new File(file, File.separator + "data.xml");            if (!data.exists()) {                data.createNewFile();            }transformer.transform(new DOMSource(document), new StreamResult(data));//参数为源和输出,使用DOMSource(Node)和StreamResult(Writer)

请务必要声明权限

0 0
原创粉丝点击