2015-10-01 65 views
1

如果有文檔記載,但是我無法在官方文檔中找到它,表示抱歉。Apache Commons Configurations containsKey在現有密鑰上返回false

我使用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> 
+0

探討你可以更好的提供實際的Java代碼。 – Karuna

+0

@Karuna我只使用XMLConfiguration打開XML配置並調用containsKey方法 – Vektor88

回答

2

您可以使用HierarchicalConfiguration來檢查節點是否存在。

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

containsKey()它按預期工作。 public boolean containsKey(String key) 檢查指定的密鑰是否包含在此配置中。請注意,對於此配置,術語「包含」意味着密鑰具有關聯的值。如果這個鍵的節點沒有任何值,但有子節點(定義或未定義),則此方法仍將返回FALSE。

這裏是代碼 import 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);   
    } 
} 
0

其實你需要使用

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

,否則你會得到一個異常這樣一個

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