2011-02-02 2 views
0

У меня возникла небольшая проблема с анализом строки xml с именем responseText в android. XML является полностью действительным и имеет следующую структуру:Синтаксическая разметка xml android

<plan> 
<entry> 
<name>john</name> 
<address>uk</address> 
</entry> 
<entry> 
<name>joe</name> 
<address>usa</address> 
</entry> 
</plan> 

код, я использую для разбора строки следующим образом:

try { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     InputSource is = new InputSource(); 

     is.setCharacterStream(new StringReader(responseText)); 

     Document doc = db.parse(is); 
     NodeList nodes = doc.getElementsByTagName("entry"); 

     for (int i = 0; i < nodes.getLength(); i++) { 

      Element element = (Element) nodes.item(i); 

      NodeList name = ((Document) element) 
        .getElementsByTagName("name"); 
      Element line = (Element) name.item(0); 
      Toast.makeText(Containers.this, 
        getCharacterDataFromElement(line), Toast.LENGTH_SHORT) 
        .show(); 

      NodeList title = ((Document) element) 
        .getElementsByTagName("address"); 
      line = (Element) title.item(0); 
      Toast.makeText(Containers.this, 
        getCharacterDataFromElement(line), Toast.LENGTH_SHORT) 
        .show(); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static String getCharacterDataFromElement(Element e) { 
    Node child = ((Node) e).getFirstChild(); 
    if (child instanceof CharacterData) { 
     CharacterData cd = (CharacterData) child; 
     return cd.getData(); 
    } 
    return "?"; 

} 

Я просто с помощью простых тостов, чтобы напечатать данные XML для экрана. Тем не менее, я получаю IOexception, когда я вхожу в цикл for. Любая идея, что не так?

+0

Пожалуйста, разместите полный текст исключения IOException. –

+0

Как получить полный текст? На самом деле это не может быть Ioexception - я знаю, однако, что он входит в исключение, я просто смотрел на предмет logcat, и появление io может быть связано с ошибкой на моем телефоне. Где печать в стеке? Или как я могу включить его? –

+0

, пожалуйста, добавьте ваш stacktrace – vsm

ответ

8

Вы импортируете типы из правильных пакетов? Что-то вроде

import java.io.StringReader; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.CharacterData; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import android.sax.Element; // Wrong Element class 

Изменения последнего импорта в

import org.w3c.dom.Element; 

и попробовать еще раз.

+0

Это была точная проблема - неправильный импорт. Не знаю, как мне это удалось! Благодарю. –

+0

Хороший! Та же ошибка, которую я делал ... –

+0

ничего себе! Eclipse авто-импорт может быть ДЕЙСТВИТЕЛЬНО dum время от времени ... спасибо тонну .. имел ту же самую проблему – Shark

1

Я не вижу ничего, что могло бы вызвать IOException внутри цикла.

Тем не менее, вы уверены, что можете просто пойти и бросить Элемент в документ? Во всяком случае вам не нужно в любом случае, так как Element также имеет метод getElementsByTagName.

+0

Если я не использую его, затмение подчеркивает его как ошибку, не уверен, почему , –

+0

@Nicklas: Но что говорит настоящий компилятор ...? –

+0

@Matti Virkkunen Метод getElementsByTagName (String) не определен для типа Element –

0

Попробуйте добавить объявление xml в начале строки.

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