Анализ файла XML в кодировке UTF-8
У меня есть XML-файл, содержащий некоторые арабские символы, извлеченные из URL, поэтому мне пришлось кодировать его в UTF-8, чтобы он мог обрабатывать такие символы.
XML-файл:
1
News Test 1
16/7/2012
<img>joelle.mobi-mind.com/imgs/news1.jpg
2
كريم
16/7/2012
<img>joelle.mobi-mind.com/imgs/news2.jpg
3
News Test 333
16/7/2012
<img>joelle.mobi-mind.com/imgs/news3.jpg
4
ربيع
16/7/2012
<img>joelle.mobi-mind.com/imgs/cont20.jpg
5
News Test 55555
16/7/2012
<img>joelle.mobi-mind.com/imgs/cont21.jpg
6
News Test 666666
16/7/2012
<img>joelle.mobi-mind.com/imgs/cont22.jpg
Я проанализировал XML, полученный по URL-адресу, как String, как показано ниже:
public String getXmlFromUrl(String url) {
try {
return new AsyncTask() {
@Override
protected String doInBackground(String... params) {
//String xml = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(params[0]);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
xml = new String(EntityUtils.toString(httpEntity).getBytes(),"UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return xml;
}
}.execute(url).get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return xml;
}
Теперь возвращенная строка передается этому методу, чтобы получить документ для последующего использования, как показано ниже:
public Document getDomElement(String xml){
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
StringReader xmlstring=new StringReader(xml);
is.setCharacterStream(xmlstring);
is.setEncoding("UTF-8");
//Code Stops here !
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;
}
Ошибка произошла с этим сообщением:
09-18 07:51:40.441: E/Error:(1210): Unexpected token (position:TEXT @1:4 in java.io.StringReader@4144c240)
Таким образом, код падает, где я показал выше со следующей ошибкой
09-18 07:51:40.451: E/AndroidRuntime(1210): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.university1/com.example.university1.MainActivity}: java.lang.NullPointerException
Пожалуйста, обратите внимание, что код прекрасно работает с кодировкой ISO.