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

本文介绍了在Android应用中如何读取XML数据文件。首先在Android Studio项目中创建assets文件夹并添加data.xml,XML内容包含language节点及其属性。在MainActivity.java中,使用Document类从XML中读取数据,并展示了读取结果。此外,还提及了如何将XML数据输出到内存卡,但需声明相应权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

请务必要声明权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值