1

抱歉,如果记录在案,但我无法在官方文档中找到它。

XMLConfiguration用来加载这个文件,但config.containsKey ("aliases")返回 false 并config.containsKey ("aliases.alias")返回 true。我是被迫检查“aliases.alias”还是有办法确定“别名”是否作为节点存在?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <name>Vocabulary</name>
    <aliases>
        <alias>Dictionary</alias>
    </aliases>
    <extensions>
        <ext>dic</ext>
        <ext>txt</ext>
        <ext>pdf</ext>
        <ext>doc</ext>
    </extensions>
    <scanmode>1</scanmode>
</configuration>
4

2 回答 2

3

您可以使用 HierarchicalConfiguration 检查节点是否存在。

if(!config.configurationAt("aliases").isEmpty())

containsKey() 它按预期工作。public boolean containsKey(String key) 检查指定的密钥是否包含在此配置中。请注意,对于此配置,术语“包含”意味着键具有关联的值。如果此键的节点没有值但有子节点(已定义或未定义),则此方法仍将返回 FALSE。

这是代码导入 org.apache.commons.configuration.ConfigurationException;导入 org.apache.commons.configuration.XMLConfiguration;

public class HirerarchicalConfig{

    public static boolean checkIfNodeExists(String nodeName,XMLConfiguration config){       
        if(!config.configurationAt(nodeName).isEmpty())
            return true;
        else 
            return false;       
    }   
    public static void main(String[] args) throws ConfigurationException{       

        XMLConfiguration config = new XMLConfiguration("configFile.xml");
        boolean aliasesNode = checkIfNodeExists("aliases",config);
        System.out.println(aliasesNode);        
    }
}
于 2015-10-02T00:43:47.023 回答
0

其实你需要使用

if(!config.configurationsAt("aliases").isEmpty())

否则你会得到一个像这样的例外

org.apache.commons.configuration2.ex.ConfigurationRuntimeException: Passed in key must select exactly one node: aliases
于 2017-08-21T14:42:40.860 回答