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