0

ここでオンラインで見つかったチュートリアルに従って、xmlを読み取ろうとしますhttp://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

public String leggi_palinsesto()
{
    String comodo="";
    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML
    Document doc = parser.getDomElement(xml); // getting DOM element
    NodeList nl = doc.getElementsByTagName(KEY_ITEM);

    // looping through all item nodes <item>

    for (int i = 0; i < nl.getLength(); i++) {
        //Element e = null;
        Element e = (Element) nl.item(i);
        String titolo = parser.getValue(e, KEY_TITOLO); // name child value
        String artista = parser.getValue(e, KEY_ARTISTA); // cost child value
        System.out.println(artista+" - "+titolo);
        comodo=artista+" - "+titolo;
    }

    return comodo;
}

デバッグが到着するとElement e = (Element) nl.item(i);classcastexception エラーが返されますが、それは正しいコードだと確信しています。

これがログキャット

07-06 18:03:14.561: E/AndroidRuntime(1602): FATAL EXCEPTION: main
07-06 18:03:14.561: E/AndroidRuntime(1602): java.lang.ClassCastException: org.apache.harmony.xml.dom.ElementImpl
07-06 18:03:14.561: E/AndroidRuntime(1602):     at it.axiomatic.radioamicizia.RadioAmiciziaActivity.leggi_palinsesto(RadioAmiciziaActivity.java:254)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at it.axiomatic.radioamicizia.RadioAmiciziaActivity$1$1.run(RadioAmiciziaActivity.java:121)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at android.os.Handler.handleCallback(Handler.java:587)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at android.os.Looper.loop(Looper.java:123)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at java.lang.reflect.Method.invokeNative(Native Method)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at java.lang.reflect.Method.invoke(Method.java:521)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-06 18:03:14.561: E/AndroidRuntime(1602):     at dalvik.system.NativeStart.main(Native Method)

これは .xml ファイルです。

http://www.radioamicizia.com/demo.xml

編集: 元のサンプル xml ファイル (http://api.androidhive.info/pizza/?format=xml) を試してみましたが、ノードを要素にキャストする際に... エラー!

編集:

static final String KEY_ITEM = "item"; // parent node
static final String KEY_TITOLO = "name";
static final String KEY_ARTISTA = "cost";

なにか提案を?

4

1 に答える 1

2

Javaドキュメントから:

public Node item(int index)

NodeList.item(i)Nodenotを返しますElement。ノードは、だけでなく他のノードでもElementかまいません。これが、エラーが発生する理由を説明しています。

XMLの要素のみを処理する場合は、次の前にこのチェックを行う必要があります。

if(nl.item(i).getNodeType() == Node.ELEMENT_NODE){
  Element e = (Element) nl.item(i);
  // Process element here
}

編集forループを次のループに置き換えます。

for (int i = 0; i < nl.getLength(); i++) {
    if(nl.item(i).getNodeType() != Node.ELEMENT_NODE)
            continue;

    Element e = (Element) nl.item(i);
    String titolo = parser.getValue(e, KEY_TITOLO); // name child value
    String artista = parser.getValue(e, KEY_ARTISTA); // cost child value
    System.out.println(artista+" - "+titolo);
    comodo=artista+" - "+titolo;
}
于 2012-07-06T16:13:39.723 に答える