将 NodeList 强制转换为 Element 时出现 NullPointerException

NullPointerException when casting NodeList to Element

提问人:Foxler2010 提问时间:7/22/2022 最后编辑:Foxler2010 更新时间:7/23/2022 访问量:68

问:

我的 DOM 相关代码遇到了一些奇怪的问题。在这里:

public Item getItem(String id) throws ConstructorNotDefinedException {

    //Find the specific item Element we are working with
    Element item = null;

    for (int i = 0; i < this.items.getLength(); i++) { //items is a NodeList of all items, derived from the document Element

        Element currentItem = (Element) this.items.item(i);

        if (currentItem.getAttribute("id") == id) { //only runs once since every ID is unique

            item = currentItem;

        }

    }

    //The line with the error
    Element typeElement = (Element) item.getElementsByTagName("type").item(0);


    //more code using typeElement...

下面是运行代码的主类:

public class test {

    public static void main(String[] args) throws ConstructorNotDefinedException {

        ItemDataReader reader = ItemDataReader.newInstance(Paths.get(System.getProperty("user.home"), "Documents", "path", "to", "xml", "document.xml"));

        Item testItem = reader.getItem("dog");

    }

}

第一部分似乎工作正常,完全没有错误,但是一旦我尝试获取typeElement,它就会抛出NullPointerException。该行中调用的方法都没有抛出异常,所以我不知道它来自哪里。

下面是我使用的 XML 文档的示例:

<item id="dog">
    <type>1</type>
    <name>Dog</name>
    <strength>10</strength>
</item>
<item id="cat">
    <type>1</type>
    <name>Cat</name>
    <strength>10</strength>
</item>

我尝试过很多东西,但我不知道发生了什么。非常感谢帮助!

编辑:

我尝试了 Benjamin W. 的建议,使用似乎已经解决了这个问题。我仍然不太确定为什么使用不起作用。.equals()==

java xml dom nullpointerexception

评论

0赞 Shavk with a Hoon 7/22/2022
你的可能是空的。如果条件从不满足,则永远不会在 for 循环中设置它。item
0赞 Shavk with a Hoon 7/22/2022
您还应该使用 not .一定要添加 print 语句来查看。您需要有一个解决方案,如果它们都不相等,则为空.equals()==id

答:

0赞 Foxler2010 7/23/2022 #1

在研究了差异之后,似乎使用使代码比较了字符串的内容,而不是像那样比较引用。由于引用总是不同的,因此每次都返回 false,然后尝试从 null 对象中获取一些信息。.equals()==