2010-07-28 62 views
1

我正在創建一個連接到Fogbugz XML API(向API發送請求,接收XML文件)的Android應用程序。現在,我正在創建一個服務來處理這些請求,並分析每個請求以訪問可用的信息。什麼是最好的方法來做到這一點?如果我得到一個inputStream,我應該使用SAX解析器嗎?如何解析XML(Fogbugz XML API)?

 DefaultHttpClient httpclient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet("My URL THAT RETURNS AN XML FILE"); 
    HttpResponse response; 
    try { 
      response = httpclient.execute(httpget); 
      HttpEntity entity = response.getEntity(); 
      InputStream stream = entity.getContent(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream)); 
      String responseString = ""; 
      String temp; 

      while ((temp=bufferedReader.readLine()) != null) 
      { 
       responseString += temp; 
      } 

      if (entity != null) { 
       entity.consumeContent(); 
      } 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

你想用這段代碼實現什麼? – Nealv 2010-07-28 15:32:18

+0

現在,我只是創建並顯示一個字符串,以確保HTTP請求正常工作。完成後,此特定代碼需要登錄到fogbugz並訪問包含令牌的xml文件。但是,在同一服務中,我將使用此令牌在FogBugz中創建,編輯或刪除案例,並且需要能夠解析返回的XML文件以獲取特定信息。 – mbauer14 2010-07-28 15:45:50

+0

順便說一句,FogBugz XML API有其怪癖。在[email protected]與我聯繫,提出任何問題或錯誤。 – 2010-07-30 13:01:50

回答

3

我建議你使用一些XML DOM庫如XOM或Dom4j。使用樹結構比使用SAX事件更容易。就我個人而言,我在Foglyn中使用XOM - FogBugz for Eclipse插件。您可以直接將InputStream傳遞給SAX/XOM/Dom4j解析器,不需要先構建字符串。此外,請確保您使用正確的編碼...您的代碼在這方面被破壞。 (當你將InputStream傳遞給解析器時,這由解析器處理,在XOM中你可以使用new Builder().build(InputStream)方法)。

One FogBugz API提示...在獲取有關案例的詳細信息時,如果您不需要事件(註釋),請不要獲取它們。即請勿將events列入列表。

+0

感謝您的信息!該字符串只是爲了測試我的Http請求是否正常工作,但是我的代碼是什麼意思呢?我幾乎沒有使用XML /解析的經驗,也不太明白你的意思。 – mbauer14 2010-07-28 15:12:27

+1

@ mbauer14:問題在於您在不指定字符編碼的情況下創建'New InputStreamReader(stream)' - 這將使用所謂的「默認」編碼 - 我不知道Android上會有什麼。 XML文檔具有在XML聲明中指定的編碼(即'<?xml version =「1.0」encoding =「utf-8」?>'),並且XML解析器知道如何讀取它,所以不必自己將InputStream轉換爲Reader,你應該直接將InputStream傳遞給你的XML解析器。 (順便說一下,FogBugz文檔說,它在爲其XML API發送輸出時總是使用UTF-8) – 2010-07-28 16:28:48

+0

好的,這是有道理的。謝謝 – mbauer14 2010-07-28 16:32:01