2

这是我的代码:

 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 文件中获取元素,我想检查元素的用户名和密码,但是关于 cast 类有一个错误,这对我来说似乎很难,...谢谢之前

4

2 回答 2

6

这就是问题:

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元素等。编号与您所在的元素相关,而不是一些全局计数。

于 2013-06-06T19:52:55.127 回答
1

getElementByTagName()返回 aNodeList并且您尝试将其强制转换为Element. 此行不正确,将为您提供ClassCastException

Element pengguna = (Element) doc.getElementsByTagName("pengguna");
于 2013-06-06T19:53:18.927 回答