java.lang.ClassCastException,无法强制转换DeepNodeListImpl

时间:2013-06-06 19:43:35

标签: java xml classcastexception nodelist

这是我的代码:

 public void Login() {  
    try{
        DocumentBuilderFactory builderfactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = builderfactory.newDocumentBuilder();

        File path = new File("src/dataPengguna/dataPengguna.xml");

        Document doc = db.parse(path);

        Element pengguna = (Element) doc.getElementsByTagName("pengguna");

        NodeList list = pengguna.getElementsByTagName("user");

        for (int i = 0; i < list.getLength(); i++) {
            Element user =  (Element) list.item(i);
            Node username =   user.getElementsByTagName("username").item(i);
            Node password =   user.getElementsByTagName("password").item(i);

            if(loginuser.getText().equals(username.getTextContent()) 
               && loginpass.getText().equals(password.getTextContent())){ 
                JOptionPane.showMessageDialog(rootPane, "welcome");
            }
        }
    }catch(Exception e){
      e.printStackTrace();

    }
    }

这是我的xml:

     <?xml version="1.0" encoding="UTF-8"?>
     <pengguna>

         <user>
         <nama>septian</nama>
         <username>septiansykes</username>
         <password>1234</password>
         <status>belumpinjam</status> 
         </user>    

         <user>
         <nama>koko</nama>
         <username>kokosan</username>
         <password>12er</password>
         <status>belumpinjam</status> 
         </user>

         <user>
         <nama>tamrin</nama>
         <username>tamrincs</username>
         <password>gt234</password>
         <status>belumpinjam</status> 
         </user>

    </pengguna>

这是我的错误:

  java.lang.ClassCastException:com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl cannot be cast to org.w3c.dom.Element

我尝试在xml文件中获取元素,我想检查元素的用户名和密码,但是有关于演员类的错误,这对我来说似乎很难,...感谢之前

2 个答案:

答案 0 :(得分:5)

这是问题所在:

Element pengguna = (Element) doc.getElementsByTagName("pengguna");

getElementsByTagName不返回单个元素 - 它返回多个元素。你可能想要这样的东西:

NodeList penggunas = doc.getElementsByTagName("pengguna");
if (penggunas.getLength() != 1) {
    // Handle this - e.g. throw an exception
}
Element pengguna = (Element) penggunas.item(0);
编辑:稍后,你有一个错误:

Node username =   user.getElementsByTagName("username").item(i);
Node password =   user.getElementsByTagName("password").item(i);

这应该是:

Node username =   user.getElementsByTagName("username").item(0);
Node password =   user.getElementsByTagName("password").item(0);

您已经在user元素中 - 因此总是想要该元素中的第一个usernamepassword元素。否则,您要求第二个username元素中的第二个user元素,第三个username元素中的第三个user元素等。编号与元素相关你在,而不是全球统计。

答案 1 :(得分:1)

getElementByTagName()返回NodeList,您尝试将其投放到Element。这一行不正确,会为您提供ClassCastException

Element pengguna = (Element) doc.getElementsByTagName("pengguna");