Commons Config - 如何删除节点?

时间:2013-10-30 16:35:35

标签: apache-commons-config

我有一个使用commons config(XMLConfiguration)构建的xml配置文件

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

我可以通过获取这样的服务器列表来获取要更新的正确节点:

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>

我想要做的是完全删除节点。

2 个答案:

答案 0 :(得分:1)

我确实找到了办法。不确定这是不是最好的方式,但对于其他人来说:

您需要找到节点的索引,然后使用XMLConfiguration.clearProperty()或XMLConfiguration.clearTree()按地址删除它。以下是我在问题中使用配置文件的示例:

// config是我的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();

答案 1 :(得分:0)

您还可以使用XPATH:

config.clearTree("servers/server[name='Google']");