2017-04-08 50 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。你的回答很好。百万感谢。 –