Java 我怎样才能使用;至于;循环和;如果;将两者循环在一起以验证xml文档中是否存在xml元素

Java 我怎样才能使用;至于;循环和;如果;将两者循环在一起以验证xml文档中是否存在xml元素,java,xml,Java,Xml,我正在尝试建立一个登录系统。为此,我需要检查xml文档中是否存在xml元素(“用户名”和“密码”)。如果匹配“用户名”和“密码”,则需要返回true,否则返回false。为此,我使用“For”循环遍历整个文档,并使用“if”循环进行验证。我正在使用java和dom解析器 xml文档: <login> <user> <username>sunimal</username> <password>1111</passwo

我正在尝试建立一个登录系统。为此,我需要检查xml文档中是否存在xml元素(“用户名”和“密码”)。如果匹配“用户名”和“密码”,则需要返回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>

苏尼马尔
1111
纳文
852
查马拉
12345
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;
}
boolean a=false;
试一试{
File inputFile=新文件(“C:\\Users\\Kavindu\\Documents\\NetBeansProjects\\chatserver2\\xml\\userrecord2.xml”);
DocumentBuilderFactory数据库工厂
=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(inputFile);
NodeList userList=doc.getElementsByTagName(“登录”);
对于(int i=0;i
如果我输入第一个元素(“sunimal”和“1111”),我可以得到true,但其他元素返回false。我以不同的方式尝试了“for”循环和“if”循环,但没有得到结果。我刚开始编程。

这段代码

NodeList userList = doc.getElementsByTagName("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)) { ...

项目(i)
更改为
项目(1)
。此时,您处于
元素,因此用户名和密码是该类型的“第一个”节点;我已经在IDE中检查了这个。谢谢。:-)

要获取标记的第一个元素,需要使用索引0<代码>eElement.getElementsByTagName(“用户名”).item(0)

当您匹配用户名和密码后,您需要退出循环

a=真; 中断

否则在下一次迭代中,它将再次设置为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;


}
public boolean checkLogin(){
布尔值a=假;
试一试{
File inputFile=新文件(“C:\\Users\\Kavindu\\Documents\\NetBeansProjects\\chatserver2\\xml\\userrecord2.xml”);
DocumentBuilderFactory数据库工厂
=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(inputFile);
NodeList userList=doc.getElementsByTagName(“用户”);
System.out.println(“用户列表长度::”+userlist.getLength());
对于(int i=0;i
如果还有其他方法,请告诉我。正如您所说,我已更改了它。但它仍然给出相同的结果,而且我将循环“i