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");