问答详情
源自:2-3 使用 DOM 解析XML 文件的节点名和节点值

为什么我这里报空指针异常?

http://img.mukewang.com/593134580001ae1008320819.jpg

大神帮看看啊

提问者:RoyalT 2017-06-02 17:48

个回答

  • 丑丶小亚
    2018-02-02 09:41:21

    首先你得知道节点得类型。1.Element 节点 2. Text 节点 3.Attr 节点

    其中代码 cn节点集合下一共有9个子节点,根据此xml,解析类型顺序依此(空格或回车为#text类型)

    (#text,Element,#text,Element,#text,Element,#text,Element,#text)

    “cn.item(k)”得到的,可能是一个Element节点(例如:<name>冰与火之歌</name>)或者

    #text节点类型,因为没有子节点,也就是说,代码“cn.item(k).getFirstChild()”为null,而你的代码

    “cn.item(k).getFirstChild().getTextContent()”其中又进行对null对象的操作,所以指针为空了。

    解决方法:

    修改34-39行代码为:

    NodeList cn=book.getChildNodes();
    for (int k = 0; k < cn.getLength(); k++) {
        if (cn.item(k).getNodeType()==Node.ELEMENT_NODE) {
            System.out.println(cn.item(k).getNodeName());
            System.out.println(cn.item(k).getFirstChild().getNodeValue());
        }
    }


  • M__
    2017-10-28 00:02:10

    把37、38行都括到if执行语句中去

  • nize1989
    2017-08-24 13:01:29

    我也有同样的问题,请问你最后怎么解决的?

  • 撒哈拉的沙V
    2017-07-21 20:09:42

    你的if条件块,没有将两个输出语句都括起来,循环结束后第二个语句再用它就会空指针异常

  • 慕粉3796571
    2017-07-12 22:40:49

    应该是当前节点下没有子节点

    也就是说你的book.xml在<name>冰与火之歌</name>改成<name><a>aa</a>冰与火之歌</name>

  • 慕UI6846194
    2017-06-09 16:58:37

    你把的xml文件内容也截图下吧,或者试下把38行换成system.out.println(cn.item(k).getFirstChild().getTextContent().getTextContent());   看下有没输出值

  • qq_小二_15
    2017-06-02 23:00:19

    应该是当前节点下没有子节点