2012-08-06 4 views
5

hier n2 ist mein NodeList, und ich möchte nur das erste Kind Knoten meines Wurzelelement sehenCasting Knoten zu Element geben Classcast

public void ClickMe(View view){ 


    Node rootElement=n2.item(0); 
    NodeList child=rootElement.getChildNodes(); 

    Node first=child.item(0); 
    //ClassCastException error is coming whenever i am casting first to Element. 

    Element nm=(Element)first; 

    Option q= getOption(nm,first); 
    Log.i(TAG,"the name is was talking about is : "+ q.getName()); 
} 

das, was Logcat sagt

07-31 20:32:38.376: E/AndroidRuntime(2950): Caused by: java.lang.ClassCastException: org.apache.harmony.xml.dom.TextImpl cannot be cast to org.w3c.dom.Element 
+0

erste ist ein Knoten, kein Element, so dass Sie es nicht –

+0

explizit niedergeschlagenen kann ich dieses Downcasting in meinem DOM-Parser implementiert haben, und da es funktioniert einwandfrei, aber hier gibt es einen Fehler. –

+0

Whitespace wird dich töten. Es ist ziemlich klar, dass der erste Knoten kein Element ist. –

Antwort

10

es so probieren ....

NodeList LOP = odoc.getElementsByTagName("Your_XML_Top_Element"); 

       Node FPN =LOP.item(0); 
       try{ 
       if(FPN.getNodeType() == Node.ELEMENT_NODE) 
        { 

        Element token = (Element)FPN; 

        NodeList oNameList1 = token.getElementsByTagName("Your_XML_Sub_Node"); 
        Element firstNameElement = (Element)oNameList1.item(0); 
        NodeList textNList1 = firstNameElement.getChildNodes(); 

} 
+0

siehe Ich möchte Knoten mit Tag-Namen nicht abrufen, ich möchte sie mit Indizes abrufen .. ist es möglich? –

+0

Auch Sie tun das gleiche Casting, Element token = (Element) FPN; in meinem Fall gibt es Fehler, wie ist das so? –

+0

Weil er auf ** Element ** Knoten filtert. Nicht jeder Knoten in einem XML-Dokument ist ein ** Element **! Die Magie in diesem Code ist die 'if' Aussage. –

2

Wenn Knoten Element dann nur werfen. Machen Sie einen Scheck wie unten.

if (first.getNodeType() == Node.ELEMENT_NODE) { Element nm=(Element)first;}