我正在尝试通过解析填充用户的XML文件来验证用户的用户名和密码。目前,我的方法回归假。它应该通过<users>
的子元素并找到给定用户名的用户,并根据checkUser()
的参数检查密码。
我似乎无法访问<password>
元素内的文本。
这是我到目前为止所尝试的内容:
fun checkUser(username: String, password: String) : Boolean {
val xmlFile = File("Users.xml")
val doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile)
var list = doc.getElementsByTagName("user")
for (i in 0 until list.length) {
var current = list.item(i)
if (current.attributes.getNamedItem("id").nodeValue == username) {
return current.lastChild.textContent == password //trying to check text against given password
}
}
return false
}
fun main(args: Array<String>) {
println(checkUser("alec", "123")) //returns false right now
}
这是我的XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
<user id="alec">
<username>alec</username>
<password>123</password>
</user>
<user id="john">
<username>john</username>
<password>415</password>
</user>
</users>
修改
current.attributes.item(0)
返回一个节点,但我需要在id
标记内获取属性<user>
并根据给定的用户名进行检查。
修改
固定代码以获取id并与username
参数进行比较,仍返回false
答案 0 :(得分:2)
如果你打印调用REAL
返回的NodeList的大小,你将得到5.第一,第三和最后一个节点是空节点。您的数据位于节点2和4中。因此,您可以使用以下代码替换代码,它将起作用。
DECIMAL(p,s)
也就是说,我很想使用更好的XML解析器,因为这段代码比需要的更冗长。
例如,使用DOM4J,您可以用
替换所有上述代码current.childNodes