2010-07-28 75 views
1

Je crée une application Android qui se connecte à l'API XML Fogbugz (envoie une requête à l'API, reçoit un fichier XML). À l'heure actuelle, je crée un service qui traitera ces demandes, et analysera chacune d'entre elles afin d'accéder à l'information utilisable. Quelle serait la meilleure façon de faire cela? Si je reçois un InputStream, devrais-je utiliser l'analyseur SAX?Comment analyser XML (API XML Fogbugz)?

 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

Que voulez-vous réaliser avec ce code? – Nealv

+0

À l'heure actuelle, je ne fais que créer et afficher une chaîne pour m'assurer que la requête HTTP fonctionne correctement. À la fin, ce code spécifique doit simplement se connecter à fogbugz et accéder à un fichier xml contenant un token. Dans le même service, cependant, je vais utiliser ce jeton pour créer, éditer ou supprimer des cas dans FogBugz, et j'ai besoin d'être capable d'analyser le fichier XML retourné pour des informations spécifiques. – mbauer14

+0

L'API XML FogBugz a ses bizarreries, soit dit en passant. Contactez-moi à [email protected] avec des questions ou des bugs. –

Répondre

3

Je suggère que vous utilisiez une bibliothèque XML DOM comme XOM ou Dom4j. Il vous sera beaucoup plus facile de travailler avec la structure arborescente qu'avec les événements SAX. Personnellement, j'utilise XOM dans Foglyn - FogBugz pour le plugin Eclipse. Vous pouvez passer InputStream directement à votre analyseur SAX/XOM/Dom4j, il n'est pas nécessaire de construire une chaîne en premier. En outre, assurez-vous que vous utilisez un encodage correct ... votre code est cassé à cet égard. (Lorsque vous passez InputStream à votre analyseur, cela est géré par l'analyseur.En mode XOM, vous pouvez utiliser la méthode new Builder().build(InputStream)).

Un indice API FogBugz ... lorsque vous obtenez des détails sur le cas, et vous n'avez pas besoin d'événements (commentaires), ne les récupérez pas du tout. C'est à dire. ne mettez pas events dans la liste des colonnes.

+0

Merci pour l'info! La chaîne était juste pour tester si ma requête Http fonctionnait, mais que voulez-vous dire par mon code est cassé? J'ai peu d'expérience avec XML/parsing, et je ne comprends pas vraiment ce que vous voulez dire. – mbauer14

+1

@ mbauer14: Le problème est que vous créez 'new InputStreamReader (stream)' sans spécifier de codage de caractères - cela utilisera l'encodage dit "par défaut" - je n'ai aucune idée de ce que ce sera sur Android. Les documents XML ont leur codage spécifié dans la déclaration XML (ie '), Et les analyseurs XML savent comment le lire, donc au lieu de convertir InputStream en Reader vous-même, vous devez transmettre directement InputStream à votre analyseur XML. (Btw, documentations FogBugz dit qu'il utilise toujours UTF-8 lors de l'envoi de sortie pour son API XML) –

+0

Ok, cela a du sens. Merci – mbauer14