我正在尝试解析配置文件,但是当我在节点排除时调用getChildNodes()时,返回的 NodeList 包含7个空值而不包含任何其他值。
我的代码:
public class MinNull {
private static final List<String> excludes = new ArrayList<>();
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
File cfgFile = new File("ver.cfg");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(cfgFile);
Element rootElement = doc.getDocumentElement();
NodeList cfg = rootElement.getChildNodes();
parseConfig(cfg);
}
private static void parseConfig(NodeList cfg) {
for (int i = 0; i < cfg.getLength(); i++) {
Node node = cfg.item(i);
String name = node.getNodeName();
switch (name) {
case "excludes":
NodeList exc = node.getChildNodes();
for(int j = 0; j < exc.getLength();j++){
Node ex = exc.item(i);
System.out.println(ex);
if(ex != null && ex.getNodeName().equals("file")){
excludes.add(ex.getTextContent());
}
}
break;
}
}
}
}
我的 xml 文件(名为ver.cfg):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<server>localhost</server>
<port>6645</port>
<project>MyApp</project>
<mainfile>MyApp.jar</mainfile>
<version>v1</version>
<excludes>
<file>Launcher.jar</file>
<file>Launch.bat</file>
<file>ver.cfg</file>
</excludes>
</root>
输出:
null
null
null
null
null
null
null
其他一切正常。
答案 0 :(得分:0)
您在
中使用了错误的索引变量Node ex = exc.item(i);
你应该在这里使用j
。
此时i = 5
和子节点5不存在,因此您将获得null
,表明该节点不存在。