2015-07-11 3 views
0

Мой внешний XML ужеНевозможно разобрать UTF-8 XML

<?xml version="1.0" encoding="UTF-8"?> 

Однако, когда я пытаюсь разобрать его в моем приложении, он не читает Unicode на ВСЕ!

Вот что я сделал и до сих пор не повезло.

private class MyDownloadTask extends AsyncTask<Void,Void,Void> 
{ 
    String URL = context.getResources().getString(R.string.XML_database_url); 
    String KEY_ITEM = "item"; // parent node 
    String KEY_NAME = "name"; 
    String KEY_COST = "location"; 
    String KEY_DESC = "url"; 
    ArrayList<RadioListElement> radioArray; 

    protected void onPreExecute(final ArrayList<String> userRadios) { 
     super.onPreExecute(); 
     radioArray = new ArrayList<RadioListElement>(); 
     MainActivity.getDataManager().loadStoredRadioStations(radioArray, userRadios); 
    } 

    protected Void doInBackground(Void... params) { 
     String xml = getXmlFromUrl(URL); 
     Document doc = getDomElement(xml); 

     NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
     for (int i = 0; i < nl.getLength(); i++) { 
      Element e = (Element) nl.item(i); 
      String name = getValue(e, KEY_NAME); 
      String cost = getValue(e, KEY_COST); 
      String description = getValue(e, KEY_DESC); 
      radioArray.add(new RadioListElement(context, name, cost, description)); 
     } 
     return null; 
} 

public Document getDomElement(String xml){ 
     Document doc = null; 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     try { 

      DocumentBuilder db = dbf.newDocumentBuilder(); 

      InputSource is = new InputSource(is,"UTF-8"); 
      is.setCharacterStream(new StringReader(xml)); 

      doc = db.parse(is); 

     } catch (ParserConfigurationException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (SAXException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (IOException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } 
     // return DOM 
     return doc; 
    } 

Я поставил UTF-8 здесь

   InputSource is = new InputSource(is,"UTF-8"); 

Что я делаю неправильно? Как я могу сделать эту работу так, чтобы она отображала Unicode для меня?

+0

Можете ли вы показать нам, откуда появился струнный XML? Это может пойти не так, потому что вам нужно также указать кодировку с помощью String. – cvesters

+0

Имеет ли XML-файл набор символов байта Юникода? –

+0

@cvesters xml не ошибается, так как довольно стандартно поставить заголовок, о чем я упоминал. – thevoipman

ответ

0

Я добавил utf-8 в код, который захватывает xml с URL-адреса. должен выглядеть следующим образом:

xml = EntityUtils.toString(httpEntity,"utf-8");

public String getXmlFromUrl(String url) { 
    String xml = null; 
    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     xml = EntityUtils.toString(httpEntity,"utf-8"); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return xml; 
} 
1

не пытаются преобразовать XML в строку себя и пытаться кормить строку DOM парсер. синтаксические анализаторы xml разумны, чтобы интерпретировать их самостоятельно.

Я предлагаю изменить getXmlFromUrl(String url) вернуть InputStream из httpEntity, как показано ниже:

return httpEntity.getContent() 

дать этот InputStream к DOM парсер, как показано ниже:

InputSource is = new InputSource(inputStream); 

Обратите внимание, что без кодирования не устанавливается в is

сейчас проанализируйте этот is и убедитесь, что он анализирует unicode, как ожидалось

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