2011-04-14 51 views
1

我有一個XML解析器完美的作品,當我從文件加載:問題解析來自一個字符串的XML,但沒有一個文件

private void getParsedXML(int id, Context context) throws Exception { 
     /* Get a SAXParser from the SAXPArserFactory. */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 

     /* Get the XMLReader of the SAXParser we created. */ 
     XMLReader xr = sp.getXMLReader(); 
     /* Create a new ContentHandler and apply it to the XML-Reader */ 
     XMLHandlerLevel myExampleHandler = new XMLHandlerLevel(); 
     xr.setContentHandler(myExampleHandler); 
     /* Load xml file from raw folder*/ 
     InputStream in = context.getResources().openRawResource(id); 

     /* Begin parsing */ 
     xr.parse(new InputSource(in)); 
     this.levelData = myExampleHandler.getLevelData(); 
     in.close(); 
    } 

但現在我也得到索姆內容形成一個服務器。 XML是再發送一個字符串,這是它的塊:

private void getParsedXML(String s) throws Exception{ 
     if(this.levelData == null){ 
      InputStream in = StringToStream(s); 
      /* Get a SAXParser from the SAXPArserFactory. */ 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLHandlerLevel myExampleHandler = new XMLHandlerLevel(); 
      XMLReader xr = sp.getXMLReader(); 
      /* Begin parsing */ 
      xr.parse(new InputSource(in)); 



      this.levelData = myExampleHandler.getLevelData(); 
      Log.e("jason",(levelData!=null)?levelData.toString():null); 
      in.close(); 
     } 
    } 

這裏是StringToString功能

public static InputStream StringToStream(String text) { 
      InputStream is = null; 
      /* 
      * Convert String to InputStream using ByteArrayInputStream 
      * class. This class constructor takes the string byte array 
      * which can be done by calling the getBytes() method. 
      */ 
      try { 
       is = new ByteArrayInputStream(text.getBytes("UTF-8")); 
       is.reset(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (Exception e){ 
       Log.e("jason","failed again"); 
      } 
      return is; 
     } 

但是,這並不工作...

我確定String的內容。 和我測試了StringToStream函數,它工作正常。

我也把日誌放在XMLHandlerLevel來檢查發生了什麼,沒有函數startDocument()甚至沒有調用,但我沒有得到任何錯誤消息沒有例外,所以我完全失去了解釋這一點。

繼續: 當XML來自context.getResources()。openRawResource(id); 但不是當它形成一個字符串 爲什麼?

感謝您的任何想法

傑森

+0

你是什麼意思,它不工作?拋出異常嗎? – kgiannakakis 2011-04-14 11:31:44

+2

你沒有把文本變成InputStream,StringReader會更好。但是,解碼代碼基本相同 - 必須有其他錯誤?在這樣的情況下,使解析方法採用xml源代碼,以使工作和非工作代碼共享一些邏輯,以便您可以消除共享代碼作爲問題。 – ThomasRS 2011-04-14 11:34:54

+0

@kgiannakakis沒有異常拋出這是最令我討厭的東西。 @Thomas tis已經做了我所做的唯一的區別是在InputSource上創建 – 2011-04-14 12:06:54

回答

4

你似乎並沒有被設置在需要一個字符串的代碼路徑內容處理程序。

爲什麼不把字符串包裝到StringReader中並解析它呢?

InputSource is = new InputSource(new StringReader(string)); 
xr.parse(is); 

您例(修改):

private void getParsedXML(String s) throws Exception{ 
    if(this.levelData == null){ 
     /* Get a SAXParser from the SAXPArserFactory. */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLHandlerLevel myExampleHandler = new XMLHandlerLevel(); 
     XMLReader xr = sp.getXMLReader(); 
     /* Begin parsing */ 
     InputSource is = new InputSource(new StringReader(string)); 
     xr.parse(is); 

     this.levelData = myExampleHandler.getLevelData(); 
     Log.e("jason",(levelData!=null)?levelData.toString():null); 
     in.close(); 
    } 
} 
+0

沒有運氣,但感謝StringReader提示。 – 2011-04-14 12:09:13

-1

我不知道,這將幫助ü但有一個名爲Jsoup.jar它添加到您的項目外部JAR文件,它擁有的API的解析XML,HTML ...看到互聯網上的教程....