【发布时间】:2020-10-22 17:58:06
【问题描述】:
目标:读取整个 XML 文件并仅返回特定值,在本例中为“用户名”和“密码”,因此我验证用户登录。
问题:程序读取“users.xml”文件时,返回“user id=0001”的所有属性和值,但其他子元素如“user id=0002” “它不会回来。就像文件中除了第一个元素外没有其他内容一样。
我尝试过的:使用 for 循环打印文件中的所有信息以逐行读取,它工作得很好,但是在获取一个特定值时,它只能看到第一个。
我想知道如何使“getUser()”返回文件中的任何“用户名”和“密码”?
这是我目前所拥有的:
users.xml
<!--I made some modifications in the password field-->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Users>
<Users>
<User id = "0001">
<firstname>sinead</firstname>
<lastname>o'connor</lastname>
<email>sinead@oconnor.ie</email>
<username>sinead</username>
<password>oconnor</password>
</User>
<User id= "0002">
<firstname>John</firstname>
<lastname>Don</lastname>
<email>john@don.ie</email>
<username>john</username>
<password>pass</password>
</User>
</Users>
readFile() 方法
void readFile(){
String pathXML = "src/user_system/my_library/xml/users.xml";
File usersXML = new File(pathXML);
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(usersXML);
document.getDocumentElement().normalize();
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
getUser() 方法
//I just split between readFile() and getUser() for better readability.
//Just changed "Users" to "User".
void getUser(){
NodeList nodeList = document.getElementsByTagName("User");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
//I also modified this bit.
Element xmlElement = (Element)nodeList.item(i);
String usernameElement = xmlElement.getElementsByTagName("username").item(0)
.getTextContent();
String passwordElement = xmlElement.getElementsByTagName("password").item(0)
.getTextContent();
if (!usernameElement.equals(users.getUsername())){
System.out.println("\nUsername "+ "\""+ users.getUsername()+ "\"" +
" was not found in our registry." + "\nPlease try again");
//users.login() is just a simple username/password form in another class.
users.login();
}
else if(!passwordElement.equals(users.getPassword())){
System.out.println("\nWrong password. Please try again.");
users.login();
}else {
System.out.println("Welcome " + WordUtils.capitalize(xmlElement.getElementsByTagName("firstname").item(0)
.getTextContent())+ " " +WordUtils.capitalize(xmlElement.getElementsByTagName("lastname").item(0).getTextContent()));
}
}
}
我更新了代码,但我仍然无法获取其他用户,只能获取第一个用户。 我得到以下输出:
Please, choose one of the options below:
1) Press 1 to Log In.
2) Press 2 to Create an Account.
3) Press 3 to Log Off.
> 1
Log In.
Please, enter your username:
> john
Please, enter your password:
> pass
Username "john" was not found in our registry.
感谢任何帮助。
【问题讨论】:
标签: java xml validation authentication