我正在尝试创建一个登录系统。为此,我需要检查xml文档中是否存在xml元素("用户名"和"密码")。如果匹配"用户名"和#34;密码"需要返回true,否则为false。为此,我使用" for"循环遍历整个文档并使用" if"循环验证。我使用java和dom解析器。
xml文档:
<login>
<user>
<username>sunimal</username>
<password>1111</password>
</user>
<user>
<username>naveen</username>
<password>852</password>
</user>
<user>
<username>chamara</username>
<password>12345</password>
</user></login>
java代码:
boolean a = false;
try {
File inputFile = new File("C:\\Users\\Kavindu\\Documents\\NetBeansProjects\\chatserver2\\xml\\userrecord2.xml");
DocumentBuilderFactory dbFactory
= DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
NodeList userList = doc.getElementsByTagName("login");
for (int i = 0; i < userList.getLength(); i++) {
Node user = userList.item(i);
Element eElement = (Element) user;
if (eElement.getElementsByTagName("username").item(i).getTextContent().equals(username) && eElement.getElementsByTagName("password").item(i).getTextContent().equals(password)) {
a = true;
} else {
a = false;
}
}
} catch (Exception ex) {
}
return a;
}
如果我输入第一个元素(&#34; sunimal&#34;和&#34; 1111&#34;),我可以得到,但是对于其他元素返回false。我试过&#34;因为&#34;循环和&#34;如果&#34;以不同的方式循环,但我无法得到结果。我是新编程的。
答案 0 :(得分:1)
这是你的解决方案;我在IDE中检查过这个。谢谢。 : - )
获取标记的第一个元素,您需要使用索引0. eElement.getElementsByTagName("username").item(0)
如果您有匹配的用户名和密码,则需要从循环中退出,
a = true; 打破;
否则在下一次迭代中它将再次设置为false。
public boolean checkLogin(){
boolean a = false;
try {
File inputFile = new File("C:\\Users\\Kavindu\\Documents\\NetBeansProjects\\chatserver2\\xml\\userrecord2.xml");
DocumentBuilderFactory dbFactory
= DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
NodeList userList = doc.getElementsByTagName("user");
System.out.println("userlist length :: "+ userList.getLength());
for (int i = 0; i < userList.getLength(); i++) {
Node user = userList.item(i);
Element eElement = (Element) user;
if (eElement.getElementsByTagName("username").item(0).getTextContent().equals(username) && eElement.getElementsByTagName("password").item(0).getTextContent().equals(password)) {
a = true;
break;
} else {
a = false;
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
return a;
}
答案 1 :(得分:0)
此代码
NodeList userList = doc.getElementsByTagName("login");
返回单个节点,即根节点(<login>
)。你想要的是
NodeList userList = doc.getElementsByTagName("user");
这将返回一个NodeList
,每个用户包含一个元素,然后你的for循环将遍历用户。
然后在
if (eElement.getElementsByTagName("username").item(i).getTextContent().equals(username)
&&
eElement.getElementsByTagName("password").item(i).getTextContent().equals(password)) { ...
将item(i)
更改为item(1)
。那时你就是&#34; at&#34; <user>
元素,因此用户名和密码是&#34;第一个&#34;那种类型的节点。