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

java.lang.ClassCastException,无法强制转换DeepNodeListImpl,java,xml,classcastexception,nodelist,Java,Xml,Classcastexception,Nodelist,这是我的密码: public void Login() { try{ DocumentBuilderFactory builderfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = builderfactory.newDocumentBuilder(); File path = new File("src/dataPengguna/dataPeng

这是我的密码:

 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文件中获取元素,我想检查元素的用户名和密码,但是cast类有一个错误,对我来说似乎很难,。。。谢谢,这就是问题所在:

Element pengguna = (Element) doc.getElementsByTagName("pengguna");
不返回单个元素-它返回多个元素。您可能需要以下内容:

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

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
元素中-因此您总是希望该元素中的第一个
username
password
元素。否则,您将要求第二个
用户
元素中的第二个
用户名
元素,第三个
用户
元素中的第三个
用户名
元素等。编号与您所在的元素相关,而不是一些全局计数。

getElementByTagName()
返回一个
节点列表
,然后尝试将其强制转换为
元素
。此行不正确,将为您提供
ClassCastException

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

+1我不会在我的答案中添加代码,因为您的答案中包含有效的代码来解决问题:)是的,它已解决,但(I=0;i@zeptyan:那是因为你有另一个bug-我将编辑我的答案以显示它。
Node username =   user.getElementsByTagName("username").item(0);
Node password =   user.getElementsByTagName("password").item(0);
Element pengguna = (Element) doc.getElementsByTagName("pengguna");