2016-06-09 3 views
0

Вот XML Я пытаюсь разобрать: http://realtime.catabus.com/InfoPoint/rest/routes/get/51Синтаксический XML в Android без объявления XML с помощью SAX

@Override 
    protected Void doInBackground(String... Url) { 
     try { 
      URL url = new URL(Url[0]); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      // Download the XML file 
      Document doc = db.parse(new InputSource(url.openStream())); 
      doc.getDocumentElement().normalize(); 
      // Locate the Tag Name 
      nodelist = doc.getElementsByTagName("VehicleLocation"); 

     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 

    } 

Во время выполнения, когда он достигает этой линии: DocumentBuilder db = dbf.newDocumentBuilder(); я получаю следующее сообщение об ошибке:

Unexpected token (position:TEXT {"RouteId":51,"[email protected]:1298 in [email protected]) 

Кажется, что-то связано с кодировкой. Мой угадывает в том, что это потому, что XML не отменяет кодировку, но, возможно, нет.

Есть ли способ указать кодировку в коде (я не могу изменить сам XML)?

Спасибо!

EDIT: Это, похоже, происходит только при анализе XML из URL-адреса. Сохранение файла локально, похоже, отлично работает.

+0

Линия DocumentBuilder db = dbf.newDocumentBuilder() выполняется * до * к документу. Это настоящий код? – mjn

+0

@mjn, есть. Есть ли проблема с этим? db нужно инициализировать до того, как db.parse можно называть – kojak

+0

Я бы удалил часть 'Во время выполнения, когда она достигает этой строки: DocumentBuilder db = dbf.newDocumentBuilder();' – mjn

ответ

0

Is there a way to specify the encoding in the code (I can't change the XML itself)?

Вы можете позвонить InputSource.setEncoding() установить кодировку.

Я бы предложил взглянуть на XmlPullParser вместо синтаксического разбора XML в Android.

Смежные вопросы