Commons配置库添加元素

时间:2013-08-02 00:15:49

标签: java xml-parsing apache-commons

我正在使用apache commons配置库来读取配置xml,它运行良好。但是,我无法修改元素的值或添加新元素。

要阅读xml,我使用以下代码:

XMLConfiguration config = new XMLConfiguration(dnsXmlPath);

boolean enabled = config.getBoolean("enabled", true));
int size = config.getInt("size");

写我试图使用:

config.setProperty("newProperty", "valueNewProperty");
config.save();

如果我调用config.getString(“newProperty”),我获得“valueNewProperty”,但xml尚未更改。 显然这不是正确的方式,或者我错过了一些东西,因为它不起作用。 谁能告诉我怎么做? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您正在修改内存中的xml结构

  

将保存已解析的文档以保持其结构。该类还尝试尽可能多地从加载的XML文档中保留信息,包括注释和处理指令。这些也将包含在save()方法创建的文档中。

     

与其他基于文件的配置类一样,此类维护已加载配置文件的名称和路径。可以使用几种setter方法更改这些属性,但save()和load()方法不会修改它们。如果XML文档包含指向其他文档(例如DTD)的相对路径,则会根据为此配置设置的路径解析这些引用。

您需要使用XMLConfiguration.html#save(java.io.Writer)方法

例如,在完成所有修改后,保存它:

 config.save(new PrintWriter(new File(dnsXmlPath)));

修改

正如评论中所述,在调用config.load()方法之前调用setProperty()可以解决问题。

答案 1 :(得分:0)

我用以下几行解决了这个问题。我错过了config.load()。

XMLConfiguration config = new XMLConfiguration(dnsXmlPath);
config.load();
config.setProperty("newProperty", "valueNewProperty");
config.save();

虽然您可以使用下一行而不是config.save()并且工作原理相同。

config.save(new PrintWriter(new File(dnsXmlPath)));