我有一个使用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>
我想要做的是完全删除节点。
答案 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']");