2015-09-28 54 views
0

我有要求,我需要從服務器獲取xml解析,如果它存在,如果不從資產文件夾中獲取文件。如何將inputource轉換爲將作爲參數提供給stringreader的inputstream?

什麼是我使用inputstream即時通訊它作爲StringReader參數進一步處理的XML。我使用XmlPullParser進行分析。

但我無法將輸入源參數傳遞給stringreader進一步解析。我不使用文檔閱讀器。請找到如下代碼。

private void readSynconfiguration() 
    { 

     XmlParser xmlparser = new XmlParser(); 

      try { 
       String strFromMbo = getDataFromMBO(); 
       if(strFromMbo != null && !strFromMbo.isEmpty()) { // first 
        InputSource is = new InputSource(new StringReader(strFromMbo)); 
        // result = getStringFromInputStream(is); 
       } 
       else { 
        context = RetailExecutionApplication.getApp().getApplicationContext(); 
        InputStream stream = context.getAssets().open("syncSettings.xml"); 
        result = getStringFromInputStream(stream); 
       } 
      } catch (IOException e) { 
       syncSetting = false; 
       e.printStackTrace(); 
      } 

     StringReader labelReader = new StringReader(result); 

     try { 
      if(syncSetting) { 
       labelSharedInstance.clear(); 
       labelSyncDetails = xmlparser.LabelsParse(labelReader); 
       labelSharedInstance = labelSyncDetails; 
      } 
     } catch (XmlPullParserException e) { 
      syncSetting = false; 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

請在這方面幫助我。

回答

2
You can not pass inputsorce object directly to StringReader. First of all you convert inputsorce to reader as follows : 

Reader reader = yourInputSource.getCharacterStream(); 
String result = reader.toString(); 

StringReader labelReader = new StringReader(result);

+0

謝謝USKMobility。我會檢查並通知你。 – coders

+0

你好USKMobility,當我修改上面提到的代碼時,整個XML不存儲在結果字符串中。它存儲的東西像JavaStringIO等結果變量 – coders

1

我認爲你是令人困惑的事情。 XmlPullParser.setInput()方法需要Reader,所以這就是你需要提供的。

在案例1(來自數據庫)中,您有一個字符串strFromMbo,因此只需包裝一個StringReader

在案例2中(從文件),你有兩個選擇:

  • 加載整個文件到內存中的字符串。這就是你正在做的。
  • 使用FileReader。使用較少的內存。

在這兩種情況下,請記住關閉您的資源。

我不明白「輸入源」與什麼有關。

String xml = getDataFromMBO(); 
if (xml == null || xml.isEmpty()) { 
    context = RetailExecutionApplication.getApp().getApplicationContext(); 
    try (InputStream stream = context.getAssets().open("syncSettings.xml")) { 
     xml = getStringFromInputStream(stream); 
    } catch (IOException e) { 
     syncSetting = false; 
     e.printStackTrace(); 
    } 
} 

if (syncSetting) { 
    try { 
     labelSharedInstance.clear(); 
     labelSyncDetails = new XmlParser().LabelsParse(new StringReader(xml)); 
     labelSharedInstance = labelSyncDetails; 
    } catch (XmlPullParserException e) { 
     syncSetting = false; 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

你好安德烈亞斯,我會從資產只有當我無法從數據庫中獲取它。這就是爲什麼即時通訊使用輸入源 – coders

+0

你好安德烈亞斯,當我嘗試按照你的建議進行更改時,它會發出異常。由於xml文件中的空格或下一行,這種預期是否會發生? – coders

+0

這取決於解析實現和異常,這兩者都不共享。如果你無法弄清楚,我會建議用相關信息創建一個新問題,遵循這個指南:[如何創建一個最小,完整和可驗證的例子](http://stackoverflow.com/help/) mcve) – Andreas

相關問題