Я использую Android для чтения документа из сети, удивительно, что я пишу здесь, потому что у меня есть проблема.Для многих сайтов у меня нет проблем, но для некоторых сайтов парсер xml в android "сварливый".Я подозреваю, что это связано с кодировкой символов, но я точно не знаю, что именно.В частности, если я загружаю файл с помощью "wget" и передаю его на Android, он работает нормально ....
Сообщение об ошибке Android, 03-23 21: 54: 47.383: ОШИБКА / xml (9062):org.apache.harmony.xml.ExpatParser $ ParseException: в строке 1, столбец 62: синтаксическая ошибка
XML-код при загрузке выглядит нормально.
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
...
Мой пример приложения для Android....
package com.example.android.helloactivity;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class HelloActivity extends Activity {
class EnclosureHandler extends DefaultHandler {
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
}
@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
Log.i("xml", "lname is : " + qName);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_activity);
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
InputSource is = new InputSource(new URL(
"http://www.hbo.com/podcasts/billmaher/podcast.xml")
.openStream());
sp.parse(is, new EnclosureHandler());
} catch (Throwable t) {
Log.e("xml", t.toString());
Toast.makeText(getApplicationContext(), t.toString(),
Toast.LENGTH_LONG).show();
}
}
}