Apache Commons Configurations содержит ключ, который возвращает false для существующего ключа

Извиняюсь, если это задокументировано, но я не смог найти это в официальной документации.

я использую XMLConfiguration загрузить этот файл, но config.containsKey ("aliases") возвращает ложь и config.containsKey ("aliases.alias") возвращает истину. Я вынужден проверить "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>

2 ответа

Решение

Вы можете использовать HierarchicalConfiguration, чтобы проверить, существует ли узел или нет.

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

containsKey () это работает как ожидалось. public boolean containsKey(String key) Проверяет, содержится ли указанный ключ в этой конфигурации. Обратите внимание, что для этой конфигурации термин "содержащийся" означает, что ключ имеет ассоциированное значение. Если для этого ключа есть узел, который не имеет значения, кроме дочерних (определенных или неопределенных), этот метод все равно вернет FALSE.

вот код импорта org.apache.commons.configuration.ConfigurationException; import 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
Другие вопросы по тегам