DOM Java中的空指针异常

时间:2014-03-26 18:05:23

标签: java xml dom

我使用以下代码进行xml节点提取,但我得到了nullpointer异常

<root>
<place >
    <city> aaaaaa </city> 
    <state / >
    <country> zzzzzzzz </country>
<place>

</root>

我尝试过以下代码

NodeList nodeList = (NodeList)xPath1.compile(temp).evaluate(xmlDocument,XPathConstants.NODESET);
TempFlat = nodeList.item(0).getFirstChild().getNodeValue();

我已经用谷歌搜索了这个

 NodeList nodeList = (NodeList)xPath1.compile(temp).evaluate(xmlDocument,XPathConstants.NODESET);
Node nValue = (Node) nodeList.getFirstChild();

其中 temp 是我的xpath。哪个是可以从文件中读取的。例子

/root/place/city
   /root/place/city
   /root/place/city

但为此我得到以下错误

E:\Work\java\test.java:80: cannot find symbol
symbol  : method getFirstChild()
location: interface org.w3c.dom.NodeList
  Node nValue = (Node) nodeList.getFirstChild();
                                                                     ^
1 error

我发现,这是因为<state / >是空的。我怎么能解决这个问题。任何人都可以帮助我

注意: 我发现了第二次错误的原因我发布了,但我需要解决空指针异常

2 个答案:

答案 0 :(得分:1)

NodeList没有任何方法getFirstChild()

http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/NodeList.html

获得NodeList

NodeList nodeList = (NodeList)xPath1.compile(temp).evaluate(xmlDocument,XPathConstants.NODESET);

nodeList获取任何节点之前,检查它的长度

if (nodeList.getLength() > 0)
    Node node = nodeList.items(0);

同样,一旦你拥有了Node并且你想在这里得到第一个孩子,你需要确保该节点有一些孩子

if (node.hasChildNodes())
    String value = node.getFirstChild().getNodeValue();

这样您可以避免null值。

答案 1 :(得分:0)

您帖子底部的编译错误是由于org.w3c.dom.NodeList没有getFirstChild()方法。请参阅JavaDoc

但是对于您的问题,您需要在调用getNodeValue()方法之前检查节点是否存在。当您在状态节点上调用getFirstChild()时,您将始终为null,因为它没有子节点。因此,对此null值调用getNodeValue()方法将导致您看到的NullPointerException。为了解决这个问题,您将在开始查找值之前检查节点是否存在。尝试类似下面的代码来解决您的问题。我不确定TempFlat是什么,所以我认为它是一个String变量。

String tempFlat = "DEFAULT VALUE";
if(noteList.item(0).hasChildNodes())
    tempFlat = nodeList.item(0).getFirstChild().getNodeValue();