2012-08-06 107 views
5

这里N2是我的节点列表,我只是想看看我的根元素的第一个子节点铸造节点元素给ClassCastException异常

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()); 
} 

这是什么logcat的说

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

首先是一个节点,而不是元素,所以你不能垂头丧气它明确 – 2012-08-06 04:59:43

+0

我在DOM解析器实现了这个向下转换,它就在那里工作得很好,但是在这里出现错误。 – 2012-08-06 05:02:05

+0

空白会杀了你。很明显,第一个Node实际上并不是一个Element。 – 2012-08-06 05:07:17

回答

10

尝试像这样....

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

看到我不想获取具有标签名称的节点,我想使用索引获取它们。是否有可能? – 2012-08-06 05:04:35

+0

即使你在做同样的演员, 元素标记=(元素)FPN; 在我的情况下,它给错误,那是怎么回事? – 2012-08-06 05:06:25

+0

因为他过滤了** Element **节点。不是XML文档中的每个节点都是**元素**!这段代码中的魔力就是'if'语句。 – 2012-08-06 05:11:19

2

如果节点元素,然后只施放它。进行如下检查。

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