Я создаю приложение для Android, которое подключается к XML-интерфейсу Fogbugz (отправляет запрос API, получает обратно XML файл). Прямо сейчас, я создаю службу, которая будет обрабатывать эти запросы, и анализировать каждый, чтобы получить доступ к полезной информации. Какой был бы лучший способ сделать это? Если я получаю inputStream, должен ли я использовать парсер SAX?
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();
}
Я предлагаю вам использовать некоторую библиотеку XML DOM, такую как XOM или Dom4j. Вам будет намного легче работать с древовидной структурой, чем с событиями SAX. Лично я использую XOM в Foglyn - FogBugz для плагина Eclipse. Вы можете передать InputStream непосредственно в ваш SAX/XOM/Dom4j парсер, нет необходимости сначала строить строку. Кроме того, убедитесь, что вы используете правильную кодировку... ваш код нарушен в этом отношении. (Когда вы передаете InputStream вашему парсеру, это обрабатывается парсером. В XOM вы можете использовать метод new Builder().build(InputStream)
).
Один подсказку API FogBugz... при получении информации о случае, и вам не нужны события (комментарии), не извлекайте их вообще. То есть не помещайте events
в список столбцов.
new InputStreamReader(stream)
без указания кодировки символов - при этом будет использоваться так называемая кодировка «по умолчанию» - я понятия не имею, что это будет на Android. Кодировка XML-документов указана в объявлении XML (т. <?xml version="1.0" encoding="utf-8" ?>
), И синтаксические анализаторы XML знают, как ее читать, поэтому вместо преобразования InputStream в Reader самостоятельно следует передать InputStream в ваш анализатор XML напрямую. (Кстати, в документации FogBugz говорится, что он всегда использует UTF-8 при отправке выходных данных для своего XML API)