читать внешние файлы XML в Android

Вы должны попытаться разделить свои данные, чтобы ускорить поиск. Дерево strcuture позволит вам найти очень быстро, если данные присутствуют или нет.

Например, начните с простой карты, которая связывает первую букву со всеми клавишами, начинающимися с этой буквы, таким образом, вы 't нужно искать все ключи, но только их меньшую часть.

Это будет выглядеть так:

ids = {}
for id in open(idfile):
    ids.setdefault(id[0], set()).add(id)

for line in sys.stdin:
    id=line.strip()
    if id in ids.get(id[0], set()):
       #print fastq
       print id
       #update ids
       ids[id[0]].remove( id )

Создание будет немного медленнее, но поиск должен быть намного быстрее (Я ожидал бы в 20 раз быстрее, если бы символ fisrt ваших ключей был хорошо распределен, а не всегда один и тот же).

Это первый шаг, вы можете сделать то же самое со вторым символом, и так на, поиск будет просто ходить по дереву с каждой буквы ...

0
задан Dhaval Jotaniya 16 January 2019 в 10:03
поделиться

2 ответа

Для вышеупомянутого образца XML вы можете попробовать приведенный ниже синтаксический анализатор

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);
     }
 }
}

Для получения дополнительной информации проверьте официальный документ

0
ответ дан MadLeo 16 January 2019 в 10:03
поделиться

Существует три способа анализа XML в Android

  • DOM Parsers
  • SAX Parsers
  • [ 1125] XMLPullParser

Выполните следующие действия

Сначала добавьте разрешение READ_EXTERNAL_STORAGE в свой файл манифеста

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

Затем проверьте разрешение во время выполнения для Android зефир и выше

Потому что Начиная с Android 6.0 (уровень API) 23) пользователи предоставляют разрешения приложениям во время работы приложения, а не при установке приложения

 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);
 }

Затем выполните синтаксический анализ вашего xml

Вот пример кода с использованием [ 1154] DOM Parsers

ОБРАЗЕЦ КОДА

Создать класс модели

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;
    }
}
[1144 ] 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

для получения дополнительной информации, пожалуйста, проверьте ниже статью

[ 1159]
  • Android - XML ​​Parser [1112 ]
  • Android XML Parser - XMLPullParser
  • Как читать XML-файл на Java (DOM Parser)
  • Пример синтаксического анализатора Java SAX
  • Как выполнить синтаксический анализ xml для класса java с представлением переработчика или в адаптере представления переработчика
  • Анализ данных XML в приложениях для Android
  • Разбор XML для Android с использованием DOM Parser
  • Учебник по разбору XML для Android
  • Обучение синтаксическому анализу XML Данные в вашем приложении для Android
    • ОБНОВЛЕНИЕ

      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();
              }
      
          }
      
      
      }
      

      ПРИМЕЧАНИЕ для средства выбора файлов я использовал AndroidFileExplorer

    0
    ответ дан Nilesh Rathod 16 January 2019 в 10:03
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: