gpt4 book ai didi

读取 XML 文件时出现 Java NullPointerException

转载 作者:行者123 更新时间:2023-12-01 13:48:01 28 4
gpt4 key购买 nike

我正在尝试从 URL 读取此 XML 文件:

<updates>
<plugin name="PluginName">
<latest>0.7</latest>
<url>[PLUGIN URL]</url>
<notes>
[UPDATE NOTES]
</notes>
<message/>
</plugin>
</updates>

这是我读取文档的Java代码:

private Document getXML(){

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setIgnoringElementContentWhitespace(true);

Document doc = null;
try {
DocumentBuilder db = dbf.newDocumentBuilder();
try {
doc = db.parse(new URL(XML_URL).openStream());
System.out.println("Successfully read XML from URL");
return doc;
} catch (MalformedURLException e) {
log(Level.SEVERE, "Update URL was borked");
e.printStackTrace();
} catch (SAXException e) {
log(Level.SEVERE, "I don't even know what happened here");
e.printStackTrace();
} catch (IOException e) {
log(Level.SEVERE, "Something in your connection broke");
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
log(Level.SEVERE, "Unable to create Parsing Document, complain to developers");
e.printStackTrace();
}

return doc;

}

此方法返回的 Document 对象随后被传递给解析它的此方法:

private double extractVersion(Document doc){

Node pluginsNode = doc.getFirstChild();
Node pluginNode = pluginsNode.getFirstChild();

while(pluginNode.hasAttributes() && !pluginNode.getAttributes().getNamedItem("name").equals(PLUGIN_NAME)){
pluginNode = pluginNode.getNextSibling();
}

Node child = pluginNode.getFirstChild();
System.out.println("Child: "+child);
System.out.println("Pnode:" + pluginNode);
while (!child.getNodeName().equals("latest")){
child = child.getNextSibling();
if(child == null){
System.out.println("SOMETHING HAPPENED");
}
}

String latest = child.getFirstChild().getNodeValue();

return Double.parseDouble(latest);
}

每当我运行代码时,我都会从这一行得到一个空指针异常:

while (!child.getNodeName().equals("latest")){

我已经改变了几个小时,并试图在其他地方寻求帮助,但我无法弄清楚发生了什么以及为什么我会收到空​​指针异常。

最佳答案

尝试使用 getTextContent() 而不是 getNodeName()。看看是否有帮助。

getNodeName() 只是根据节点的类型返回一个 String,而不是其内容。

编辑

尝试

while (child != null && !child.getNodeName().equals("latest")) {
child = child.getNextSibling();
}

编辑

以上所有方法均无效。

我认为真正的问题在这里:

Node pluginsNode = doc.getFirstChild();

尝试将其替换为:

Node pluginsNode = (Node)doc.getDocumentElement();

根据this问题。

编辑

经过一些调试,解决方案如下:

private double extractVersion(Document doc){

String result = "";

NodeList nodeList = doc.getElementsByTagName("latest");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeName().equals("latest")) {
result = node.getTextContent();
}
}

return Double.parseDouble(result);
}

关于读取 XML 文件时出现 Java NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200377/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com