我使用以下代码进行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 / >
是空的。我怎么能解决这个问题。任何人都可以帮助我
注意: 我发现了第二次错误的原因我发布了,但我需要解决空指针异常
答案 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();