解析XML并根据元素值检查值

时间:2018-04-29 01:07:39

标签: xml kotlin

我正在尝试通过解析填充用户的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

1 个答案:

答案 0 :(得分:2)

如果你打印调用REAL返回的NodeList的大小,你将得到5.第一,第三和最后一个节点是空节点。您的数据位于节点2和4中。因此,您可以使用以下代码替换代码,它将起作用。

DECIMAL(p,s)

也就是说,我很想使用更好的XML解析器,因为这段代码比需要的更冗长。

例如,使用DOM4J,您可以用

替换所有上述代码
current.childNodes