Apache Commons 配置 containsKey returns false on existing key

Apache Commons Configurations containsKey returns false on existing key

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

我正在使用 XMLConfiguration 加载此文件,但 config.containsKey ("aliases") returns 错误且 config.containsKey ("aliases.alias") returns 正确。我是被迫检查 "aliases.alias" 还是有办法确定 "aliases" 是否作为节点存在?

<?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>

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

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

containsKey() 它按预期工作。 public 布尔值包含键(字符串键) 检查指定的密钥是否包含在此配置中。请注意,对于此配置,术语 "contained" 表示该键具有关联值。如果此键的节点没有值但有子节点(已定义或未定义),此方法仍将 return 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);        
    }
}

实际上你需要使用

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

否则你会遇到这样的异常

org.apache.commons.configuration2.ex.ConfigurationRuntimeException: Passed in key must select exactly one node: aliases