org.w3c.dom.Node上的getChildNodes()返回仅为null的NodeLits

时间:2014-09-19 10:36:28

标签: java xml

我正在尝试解析配置文件,但是当我在节点排除时调用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

其他一切正常。

1 个答案:

答案 0 :(得分:0)

您在

中使用了错误的索引变量
Node ex = exc.item(i);

你应该在这里使用j

此时i = 5和子节点5不存在,因此您将获得null,表明该节点不存在。