2017-04-08 17 views
0

我想使用意圖在我的應用程序中選擇一個XML文件,然後動態解析它。我知道解析和顯示過程,但我的主要問題是輸入流。請注意,選擇XML應該動態完成,而不是資產。任何人都可以幫助我嗎?如何使用意圖選擇一個XML文件並動態解析它

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode==PICKFIlE_RESULT_CODE) { 
     if (resultCode == RESULT_OK) { 
      File file = null; 



      String filepath = data.getData().getPath(); 
      file = new File(filepath); 
      String v = file.getAbsolutePath(); 
      try 
      { 

       InputStream is = new FileInputStream(v); 
       DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
       Document doc = dBuilder.parse(is); 
       Element element = doc.getDocumentElement(); 
       element.normalize(); 
       NodeList nList = doc.getElementsByTagName("user"); 

       for(int i=0;i<nList.getLength();i++) 
       { 
        Node node = nList.item(i); 
        if(node.getNodeType()==Node.ELEMENT_NODE) 
        { 
         Element element2 = (Element)node; 
         textView.setText(textView.getText()+"\nName : "+getValue("name",element2)+"\n"); 
         textView.setText(textView.getText()+"\nSurname : "+getValue("surname",element2)+"\n"); 
         textView.setText(textView.getText()+"\nSalary : "+getValue("salary",element2)+"\n"); 
        } 
       } 
      } 
      catch (Exception e) 
      { 

      } 



public void onClick(View v) { 
final static private int PICKFILE_RESULT_CODE =10; 

    try { 
     Intent intent = new Intent(); 
     intent.setType("file/*"); 

     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,true); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(intent, PICKFIlE_RESULT_CODE); 

    } 
    catch (Exception e) 
    { 
     Toast.makeText(getApplicationContext(),"No file found",Toast.LENGTH_LONG).show(); 
    } 
} 
+0

請告訴你如何使用'startActivityForResult()'和'PICKFIlE_RESULT_CODE'來觸發這個'onActivityResult()'。請注意,'Uri'不是一個文件,因此'getPath()'經常是無用的。 – CommonsWare

+0

Tnx您的關注。我附上了你想要的代碼,並且請注意,pickfile_result_code已經在這個活動中被全局定義,但是我粘貼在這裏以便你可以輕鬆地看到。 –

回答

1

首先,file/*不是有效的MIME類型。如果您想接受任何內容,請使用有效的MIME類型,或使用*/*

二,ACTION_GET_CONTENT返回Uri。那Uri不是一個文件。擺脫所有你的File邏輯。使用ContentResolver(從getContentResolver())和openInputStream()獲得由Uri標識的內容的InputStream

+0

Tnx很多。我明白了,我現在就設法解析了xml。你的回答很好。百萬感謝。 –

相關問題