2013-10-30 52 views
1

我有使用公共配置(XMLConfiguration中)Commons Config - 如何刪除一個節點?

<servers> 
    <server> 
    <name>Google</name> 
    <address>www.google.com</address> 
    <server> 
    <server> 
    <name>Yahoo</name> 
    <address>www.yahoo.com</address> 
    </server> 
</servers> 

我能得到正確的節點通過獲取這樣的服務器列表更新XML配置文件來建立:

List<HierarchicalConfiguration> serverList = config.configurationsAt("server"); 
for(HierarchicalConfiguration server : serverList){ 
    if(server.getString("name").equals("Google")){ 
    //now I have the node I want to work with 
    // and I can update it but I cannot delete it completely 
    } 

我不瞭解如何刪除節點。如果我調用server.clear(),則數據將消失,但仍保留一個空節點。

<servers> 
    <server/> 
    <server> 
    <name>Yahoo</name> 
    <address>www.yahoo.com</address> 
    </server> 
</servers> 

我想要做的是完全刪除節點。

回答

1

我確實找到了一個辦法。不知道這是否是最好的方式,但對其他人來說:

您需要找到該節點的索引,然後使用XMLConfiguration.clearProperty()或XMLConfiguration.clearTree()通過地址刪除它。下面是使用在我的問題的配置文件的例子:

//配置,那麼我XMLConfiguration中對象

List<HierarchicalConfiguration> serverList = config.configurationsAt("server"); 
Integer index = 0; 

for(HierarchicalConfiguration server : serverList){ 
    if(server.getString("name").equals("Google")){ 
    //for Google, this evaluates to "server(0)", for Yahoo, "server(1)" 
    config.clearTree("server("+Integer.toString(index)+")"); 
    } 
    index++; //increment the index at the end of each loop 
} 
//don't forget to write changes to file 
config.save();