使用Xml文件格式存储数据

这篇博客介绍了在Android环境中如何使用XML格式存储数据。详细阐述了从通过DocumentBuilderFactory生成DocumentBuilder,创建Document对象,建立数据节点,设置节点关系到最终保存XML数据到指定地址的完整流程。涉及到的关键步骤包括DOM转换、DOMSource、StreamResult、TransformerFactory以及编码格式的设置。

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

xml数据格式:
这里写图片描述

存储格式是以节点为主,一个节点衍生出另外的子节点(比如name和phone节点属于lianxiren,lianxiren节点属于xinxi)

存储流程(生成xml数据格式):
1.通过DocumentBuilderFactory获得DocumentBuilder
2.创建Document接口进行DOM转换
3.建立数据节点
4.把数据给相应节点
5.设置节点关系

代码:

private EditText nameEdit;
    private EditText phoneEdit;
    private Button saveBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xml_file_save);
        saveBtn = (Button) findViewById(R.id.btnSaveIsXml);
        if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            Toast.makeText(this,"SD Card Can't Find",Toast.LENGTH_SHORT).show();
            saveBtn.setEnabled(false);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_xml_file_save, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void savexmlOnClick(View v) throws ParserConfigurationException, TransformerException {
        //通过DocumentBuilderFactory获得DocumentBuilder
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        builder = factory.newDocumentBuilder();
        //创建Document接口进行DOM转换
        Document document = builder.newDocument();
        //建立数据节点
        Element jiedian1 = document.createElement("xinxi");
        Element jiedian2 = document.createElement("dianhuaben");
        Element jiedian31 = document.createElement("name");
        Element jiedian32 = document.createElement("phone");
        //把数据给相应节点(这里的布局通过两个EditText控件获取用户的数据)
        nameEdit = (EditText) findViewById(R.id.nameEdit);
        phoneEdit = (EditText) findViewById(R.id.phoneEdit);

        jiedian31.appendChild(document.createTextNode(nameEdit.getText().toString()));
        jiedian32.appendChild(document.createTextNode(phoneEdit.getText().toString()));
        //设置节点关系
        jiedian2.appendChild(jiedian31);
        jiedian2.appendChild(jiedian32);
        jiedian1.appendChild(jiedian2);
        document.appendChild(jiedian1);   
        //剩下的为保存为xml格式的代码

———————————————————————————————–分割线~~~—–

保存xml数据格式流程(保存为xml数据格式):
1.把xml数据格式放进DOMSource里
2.用StreamResult指定保存地址
3.通过TransformerFactory得到Transformer
4.通过setOutputProperty方法设置编码格式
5.通过transform方法输出保存

代码:

//把xml数据格式放进DOMSource里
        DOMSource domSource = new DOMSource(document);
        //用StreamResult指定保存地址(这里是放到了SD卡里面,所以在OnCreate方法里有做SD卡的判断)
        File file = new File(Environment.getExternalStorageDirectory()+"/dianhuaben.xml");
        StreamResult dizhi = new StreamResult(file);
        //通过TransformerFactory得到Transformer
        TransformerFactory factory1 = TransformerFactory.newInstance();
        Transformer transformer = null;
        transformer = factory1.newTransformer();
        //通过setOutputProperty方法设置编码格式
        transformer.setOutputProperty(OutputKeys.ENCODING,"utf-8");
        //通过transform方法输出保存(参数为得到的数据,以及得到的地址)
        transformer.transform(domSource, dizhi);
        //做一个保存成功的提醒
        Toast.makeText(getApplicationContext(),"Save Success!!!",Toast.LENGTH_SHORT).show();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值