read external XML files in Android

泪湿孤枕 提交于 2019-12-13 03:22:39

问题


how to read this type of data of an external XML file in android app and set in views

<?XML version="1.0"?>  
<OKV
r="129120190116115414009" 
a="Address" g="male" m="123456" 
e="email" d="14021996" i="imagelink" 
n="My Name" v="1"/>

回答1:


There are three way to parse an XML in Android

  • DOM Parsers
  • SAX Parsers
  • XMLPullParser

Follow these steps

First, add permission of READ_EXTERNAL_STORAGE in your manifest file

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Then check runtime permission for android marshmallow and above

Because Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app

 int grant = ContextCompat.checkSelfPermission(this, permission);
 if (grant != PackageManager.PERMISSION_GRANTED) {
     String[] permission_list = new String[1];
     permission_list[0] = permission;
     ActivityCompat.requestPermissions(this, permission_list, 1);
 }

Then Parse your xml

Here is the sample code using DOM Parsers

SAMPLE CODE

Create a model class

public class Model {

    String rValue, aValue, eValue, nValue, gValue, dValue, vValue, mValue, iValue;

    public String getrValue() {
        return rValue;
    }

    public void setrValue(String rValue) {
        this.rValue = rValue;
    }

    public String getaValue() {
        return aValue;
    }

    public void setaValue(String aValue) {
        this.aValue = aValue;
    }

    public String geteValue() {
        return eValue;
    }

    public void seteValue(String eValue) {
        this.eValue = eValue;
    }

    public String getnValue() {
        return nValue;
    }

    public void setnValue(String nValue) {
        this.nValue = nValue;
    }

    public String getgValue() {
        return gValue;
    }

    public void setgValue(String gValue) {
        this.gValue = gValue;
    }

    public String getdValue() {
        return dValue;
    }

    public void setdValue(String dValue) {
        this.dValue = dValue;
    }

    public String getvValue() {
        return vValue;
    }

    public void setvValue(String vValue) {
        this.vValue = vValue;
    }

    public String getmValue() {
        return mValue;
    }

    public void setmValue(String mValue) {
        this.mValue = mValue;
    }

    public String getiValue() {
        return iValue;
    }

    public void setiValue(String iValue) {
        this.iValue = iValue;
    }
}

MainActivity code

public class MainActivity extends AppCompatActivity {

    List<Model> modelArrayList = new ArrayList<>();

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

        // first check for runtime permission
        String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
        int grant = ContextCompat.checkSelfPermission(this, permission);
        if (grant != PackageManager.PERMISSION_GRANTED) {
            String[] permission_list = new String[1];
            permission_list[0] = permission;
            ActivityCompat.requestPermissions(this, permission_list, 1);
        }else {
            ParseXML();
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainActivity.this, "READ_EXTERNAL_STORAGE permission granted", Toast.LENGTH_SHORT).show();
                ParseXML();
            } else {
                Toast.makeText(MainActivity.this, " READ_EXTERNAL_STORAGE permission not granted", Toast.LENGTH_SHORT).show();
            }
        }

    }

    private void ParseXML() {

        File dir = Environment.getExternalStorageDirectory();
        File yourFile = new File(dir, "test.xml");

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;

        try {

            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(yourFile);
            doc.getDocumentElement().normalize();

            Log.e("Root_element" , doc.getDocumentElement().getNodeName());
            NodeList nodeList = doc.getElementsByTagName("OKV");

            modelArrayList = new ArrayList<Model>();


            for (int i = 0; i < nodeList.getLength(); i++) {

                Element element = (Element) nodeList.item(i);

                Model model = new Model();
                model.setrValue(element.getAttribute("r"));
                model.setaValue(element.getAttribute("a"));
                model.setgValue(element.getAttribute("g" ));
                model.setmValue(element.getAttribute("m" ));
                model.seteValue(element.getAttribute("e" ));
                model.setdValue(element.getAttribute("d" ));
                model.setiValue(element.getAttribute("i"));
                model.setnValue(element.getAttribute("n" ));
                model.setvValue(element.getAttribute("v"));

                modelArrayList.add(model);



            }

            for (int i = 0; i < modelArrayList.size(); i++) {

                Log.e("DATA_VALUE", modelArrayList.get(i).getaValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getdValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).geteValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getnValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getvValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getgValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getrValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getiValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getmValue());
            }
        } catch (SAXException | ParserConfigurationException | IOException e1) {
            e1.printStackTrace();
        }

    }


}

OUTPUT

01-19 13:23:39.545 15689-15689/neel.com.demo E/Root_element: OKV
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: Address
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 14021996
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: email
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: My Name
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 1
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: male
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 129120190116115414009
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: imagelink
01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 123456

for more information please check below article

  • Android - XML Parser
  • Android XML Parser – XMLPullParser
  • How to read XML File in Java (DOM Parser)
  • Java SAX Parser Example
  • How to parse an xml to java class with recycler view or in adapter of recyclerview
  • Parsing XML data in Android Apps
  • Android XML Parsing using DOM Parser
  • Android XML Parsing Tutorial
  • Learning to Parse XML Data in Your Android App

UPDATE

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;


import com.nbsp.materialfilepicker.MaterialFilePicker;
import com.nbsp.materialfilepicker.ui.FilePickerActivity;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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


public class MainActivity extends AppCompatActivity {

    List<Model> modelArrayList = new ArrayList<>();

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


        // first check for runtime permission
        String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
        int grant = ContextCompat.checkSelfPermission(this, permission);
        if (grant != PackageManager.PERMISSION_GRANTED) {
            String[] permission_list = new String[1];
            permission_list[0] = permission;
            ActivityCompat.requestPermissions(this, permission_list, 1);
        } else {
            pickFile();
        }
    }

    private void pickFile() {
        new MaterialFilePicker()
                .withActivity(this)
                .withRequestCode(1)
                .withFilterDirectories(true)
                .withHiddenFiles(true)
                .start();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {

            String filePath = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH);
            Log.e("FILE_PATH", filePath);
            ParseXML(filePath);
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainActivity.this, "READ_EXTERNAL_STORAGE permission granted", Toast.LENGTH_SHORT).show();

                pickFile();
            } else {
                Toast.makeText(MainActivity.this, " READ_EXTERNAL_STORAGE permission not granted", Toast.LENGTH_SHORT).show();
            }
        }

    }

    private void ParseXML(String path) {


        File yourFile = new File(path);

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;

        try {

            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(yourFile);
            doc.getDocumentElement().normalize();

            Log.e("Root_element", doc.getDocumentElement().getNodeName());
            NodeList nodeList = doc.getElementsByTagName("OKV");

            modelArrayList = new ArrayList<Model>();


            for (int i = 0; i < nodeList.getLength(); i++) {

                Element element = (Element) nodeList.item(i);

                Model model = new Model();
                model.setrValue(element.getAttribute("r"));
                model.setaValue(element.getAttribute("a"));
                model.setgValue(element.getAttribute("g"));
                model.setmValue(element.getAttribute("m"));
                model.seteValue(element.getAttribute("e"));
                model.setdValue(element.getAttribute("d"));
                model.setiValue(element.getAttribute("i"));
                model.setnValue(element.getAttribute("n"));
                model.setvValue(element.getAttribute("v"));

                modelArrayList.add(model);


            }

            for (int i = 0; i < modelArrayList.size(); i++) {

                Log.e("DATA_VALUE", modelArrayList.get(i).getaValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getdValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).geteValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getnValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getvValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getgValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getrValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getiValue());
                Log.e("DATA_VALUE", modelArrayList.get(i).getmValue());
            }
        } catch (SAXException | ParserConfigurationException | IOException e1) {
            e1.printStackTrace();
        }

    }


}

NOTE for file picker i have used AndroidFileExplorer




回答2:


For above xml sample you can try the below parser

public class MainActivity extends Activity {

    ArrayList<String> r_no;
    int count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         r_no = new ArrayList<String>();

         try {
         File file = new File("mnt/sdcard/yourxmlfile.xml");
         InputStream is = new FileInputStream(file.getPath());
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
         Document doc = db.parse(new InputSource(is));
         doc.getDocumentElement().normalize();

         NodeList n = doc.getElementsByTagName("OKV");

         for (int j = 0; j < n.getLength(); j++) {
             Node node = n.item(j);

             Element fstElmnt = (Element) node;

             r_no.add(fstElmnt.getAttribute("r"));

        }
     } catch (Exception e) {
         System.out.println("XML Pasing Excpetion = " + e);
     }
 }
}

For more info check official Document



来源:https://stackoverflow.com/questions/54214603/read-external-xml-files-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!