大神帮看看啊
首先你得知道节点得类型。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()); } }
把37、38行都括到if执行语句中去
我也有同样的问题,请问你最后怎么解决的?
你的if条件块,没有将两个输出语句都括起来,循环结束后第二个语句再用它就会空指针异常
应该是当前节点下没有子节点
也就是说你的book.xml在<name>冰与火之歌</name>改成<name><a>aa</a>冰与火之歌</name>
你把的xml文件内容也截图下吧,或者试下把38行换成system.out.println(cn.item(k).getFirstChild().getTextContent().getTextContent()); 看下有没输出值
应该是当前节点下没有子节点