簡體   English   中英

如何通過Java / Android Studio將節點和值保存到xml文件

[英]How to save nodes and values to an xml file through java /Android Studio

該應用程序當前在運行時具有兩個TextViews,兩個TextEdits,以及一個保存按鈕,用於將密碼和電子郵件保存到String變量。 我有一個名為users.xml的xml文件,當按下按鈕時,我想在其中保存電子郵件和密碼(除了將電子郵件和密碼保存到String變量之外)有什么建議嗎?

碼:

package com.example.ashwinpraveen1.domdoc;

import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;


public class MainActivity extends ActionBarActivity {

    TextView printText;
    EditText emailEdit, passwordEdit;
    Button saveButton;
    String email,password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText emailEdit = (EditText) findViewById(R.id.emailEdit);
        final EditText passwordEdit = (EditText) findViewById(R.id.passwordEdit);
        Button saveButton = (Button) findViewById(R.id.saveButton);

        Document xmlDoc = getDocument();
        final TextView printText = (TextView) findViewById(R.id.printText);
        // checking if I can retrieve the root node
        printText.setText(xmlDoc.getDocumentElement().getNodeName());


        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                email = emailEdit.getText().toString();
                password = passwordEdit.getText().toString();
                if (email.isEmpty() || password.isEmpty()) {
                    //code when the user presses the "save" button for no reason
                }
            }
        });




            }

            private  Document getDocument() {
                try {
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    factory.setIgnoringComments(true);
                    factory.setIgnoringElementContentWhitespace(true);
                    //factory.setValidating(true);

                    DocumentBuilder builder = factory.newDocumentBuilder();
                    AssetManager assetManager = this.getAssets();
                    InputStream is = assetManager.open("users.xml");

                    InputSource inStream = new InputSource(is);
                    return builder.parse(inStream);

                }
                catch(Exception e) {
                    TextView printText = (TextView) findViewById(R.id.printText);
                    printText.setText(e.getMessage());
                    return null;
                }
            }



    }

users.xml:

<?xml version="1.0" encoding="UTF-8"?>

<list>
    <users>
        <user1>Bob</user1>
        <pass1>BobNeedsHelpWithxml</pass1>
    </users>
    <users>
        <user2>Ash</user2>
        <pass2>AshNeedsHelpToo</pass2>
    </users>
</list>

我首先建議將您的xml文件更改為如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
    <user>
        <username>Bob</username>
        <password>BobNeedsHelpWithxml</password>
    </user>
    <user>
        <username>Ash</username>
        <password>AshNeedsHelpToo</password>
    </user>
</users>

標簽<user1><user2> ,..., <userN>沒有任何意義。 如果需要將ID與每個用戶相關聯,請改用<user id = "1"><user id = "2"> ,..., <user id = "N">

然后,請記住資產目錄中的文件是只讀的,因此請不要在其中放置xml文件。 內部存儲很好。 現在, getDocument()方法如下所示:

private Document getDocument() {
        Document d = null;
        try {
           FileInputStream  f = openFileInput(xmlFileName);

           DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
           DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
           d = dBuilder.parse(f);
        } catch (ParserConfigurationException | IOException | SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        return  d;
    }

單擊保存按鈕后,請執行以下操作:

//append new user
Element users = xmlDoc.getDocumentElement();

Element newUser = xmlDoc.createElement("user");

Element newUsername = xmlDoc.createElement("username");
Element newPassword = xmlDoc.createElement("password");

newUsername.appendChild(xmlDoc.createTextNode(email));
newPassword.appendChild(xmlDoc.createTextNode(password));

newUser.appendChild(newUsername);
newUser.appendChild(newPassword);

users.appendChild(newUser);

//save to file
DOMSource source = new DOMSource(xmlDoc);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
StreamResult result = new StreamResult(openFileOutput(xmlFileName, Context.MODE_PRIVATE)); 
transformer.transform(source, result);

請注意,我添加了一個名為xmlFileName的新字段:

static final String xmlFileName = "users.xml";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM