Java 为什么我需要验证节点是否是元素的实例?

Java 为什么我需要验证节点是否是元素的实例?,java,xml,element,instanceof,Java,Xml,Element,Instanceof,我已经创建了一个简单的XML文件,并且正在尝试打印子节点。我已经设法做到了这一点,但只有在我首先验证我的person节点是元素的实例时,它才会起作用。我认为元素是节点的实例 我在下面的代码中所做的就是从名为nameList的节点列表中获取每个项,并将其转换为元素,以便将它们打印到标准输出。如果我不检查person是否是元素的实例,为什么会出现异常(java.lang.ClassCastException) 提前谢谢 // Get the child nodes tag names from th

我已经创建了一个简单的XML文件,并且正在尝试打印子节点。我已经设法做到了这一点,但只有在我首先验证我的person节点是元素的实例时,它才会起作用。我认为元素是节点的实例

我在下面的代码中所做的就是从名为nameList的节点列表中获取每个项,并将其转换为元素,以便将它们打印到标准输出。如果我不检查person是否是元素的实例,为什么会出现异常(java.lang.ClassCastException)

提前谢谢

// Get the child nodes tag names from the root element
    System.out.println("These are the names in child nodes: ");
    NodeList nameList = element.getChildNodes();
    for(int i = 0; i < nameList.getLength(); i++) {
        Node person = nameList.item(i);
        if (person instanceof Element){
            Element name = (Element)person;
            System.out.println(name);
        }
    }
//从根元素获取子节点标记名
System.out.println(“这些是子节点中的名称:”);
NodeList nameList=element.getChildNodes();
对于(int i=0;i
根据,您可以正确地说
元素扩展了
节点
,但是它不是
节点
的唯一子类

这本质上意味着在
NodeList
中可能有另一个对象扩展节点,它不是元素,即


尝试将非
元素或其子类的任何类强制转换为
元素
,将导致ClassCastException。

因为如果不考虑强制转换,可以得到异常(可能是ClassCastException),因此节点列表中有非元素的节点。因为如果它们是元素,就不会出现异常。所以问题是——它们是什么?为什么不添加一个'else'子句来打印它们是什么(比如,类名)?如果不检查
person
是否是
元素
对象,会出现什么异常?哪一行会生成异常?假设您使用的是
org.w3c.dom
包中的类:虽然每个都是,反之亦然:不是每个
节点都是
元素
——它可以是一个或一个或其他什么。抛出的异常是第7行的java.lang.ClassCastException,即“元素名=(元素)人;”