Проблема при разборе строки XML в Java - PullRequest
3 голосов
/ 30 июня 2011

Я пишу приложение для Android, и я хотел бы получить строку XML из Интернета и получить всю информацию, которая в нем содержится.Прежде всего, я получаю строку (этот код работает):


URL url = new URL("here my adrress");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String myData = reader.readLine();
reader.close();

Затем я использую DOM:


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(myData));

Все еще без проблемКогда я пишу


Document doc = db.parse(is);

, приложение больше ничего не делает.Останавливается без ошибок.Может кто-нибудь сказать, пожалуйста, что происходит?

Ответы [ 3 ]

4 голосов
/ 30 июня 2011

Я не знаю, почему ваш код не работает, потому что нет ошибки, но я могу предложить альтернативы.

Во-первых, я уверен, что ваш новый InputStream "is" не нужен. «parse ()» может принимать «url.openStream ()» или «myData» непосредственно в качестве аргумента.

Еще одной причиной ошибки может быть то, что ваши xml-данные содержат более одной строки (я знаю, вы сказали, что первая часть вашего кода работала, но я бы предпочел упомянуть об этом, просто чтобы быть уверенным). Если это так, «reader.readLine ()» получит только часть ваших XML-данных.

Надеюсь, это поможет.

1 голос
/ 30 июня 2011

Используйте XmlPullParser, это очень быстро.Передайте строку из Интернета и получите хеш-таблицу со всеми значениями.

public Hashtable<String, String> parse(String myData) { 
    XmlPullParser parser = Xml.newPullParser();
    Hashtable<String, String> responseFromServer = new Hashtable<String, String>();

    try {
         parser.setInput(new StringReader (responseString));
         int eventType = parser.getEventType();
         while (eventType != XmlPullParser.END_DOCUMENT) {
             if(eventType == XmlPullParser.START_TAG) {
                 String currentName = parser.getName();
                 String currentText = parser.nextText();

                 if (currentText.trim().length() > 0) {
                     responseFromServer.put(currentName, currentText);
                 } 
             }               
             eventType = parser.next();
         }         
    } catch (Exception e) {
        e.printStackTrace();
    }
    return responseFromServer;
}
1 голос
/ 30 июня 2011

Используйте SAXParser вместо DOM-парсера.SAXParser более эффективен, чем DOM-парсер.Вот два хороших учебника по SAXParser 1. http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser 2. http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...