这是我要解析的xml
<metadata>
<groupId>org.chromium</groupId>
<artifactId>chromedriver-win32</artifactId>
<versioning>
<release>2.14</release>
<versions>
<version>2.14</version>
</versions>
<lastUpdated>20150610112540</lastUpdated>
</versioning>
</metadata>
当我尝试解析上面的XML时,即使我已经处理了空检查,我也得到了NullPointerException
。以下是代码
private String getVersionFromNode(Element eElement) {
String version = null;
// Get the latest version
String tagName = "latest";
try {
version = eElement.getElementsByTagName(tagName).item(0).getTextContent();
// If latest version is not available take the release
// version
if ( version.isEmpty() || null == version || "null" == version) {
tagName = "release";
version = eElement.getElementsByTagName(tagName).item(0).getTextContent();
}
}
catch (NullPointerException e) {
System.out.println("not able to parse " + tagName + " tag " + e.getMessage());
}
return version;
}
当版本为null时,它应该在下面的块中输入。
if ( version.isEmpty() || null == version || "null" == version) {
tagName = "release";
version = eElement.getElementsByTagName(tagName).item(0).getTextContent();
}
这个问题应该解决什么问题?
答案 0 :(得分:3)
您的String tagName
是"latest"
并且在您的xml文件中,没有名为latest
的元素,因此您的version
仍为null
,因此NullPointerException
代码生成1}}:
version.isEmpty()
在您的if
声明中执行。因为version
是null
。并且您的代码会尝试检查null
是否为空。它不能。因此,此处生成NullPointerException
。
要处理这种情况,请先检查version
是否为null
。其次,检查字符串version
是否等于字符串"null"
。第三,检查它是否为空。因此,请改变if
语句中的条件顺序:
if ( version.isEmpty() || null == version || "null" == version)
到
if (null == version || "null" == version || version.isEmpty())
顺便说一句,作为侧面提示,请使用:
"null".equals(version)
而不是
"null" == version
答案 1 :(得分:2)
改变你的状况
if ( version.isEmpty() || null == version || "null" == version)
到
if (null == version || "null".equals(version) || version.isEmpty())
答案 2 :(得分:1)
将方法调用链接在一起时,每一步都会冒NullPointerException
的风险。例如,在你的行
version = eElement.getElementsByTagName(tagName).item(0).getTextContent();
NullPointerException
有4个机会:
eElement
为空,则尝试拨打getElementsByTagName(tagName)
getElementsByTagName(tagName)
返回null,则尝试调用item(0)
item(0)
返回null,则尝试调用getTextContent()
并非所有这些都可以在您的代码中使用,因为指定了tagName
,但您应该始终小心。
您的问题的另一种方法是使用XPath