1

我正在使用 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 没有改变。显然这不是正确的方法,或者我错过了一些东西,因为它不起作用。谁能告诉我该怎么做?提前致谢。

4

2 回答 2

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()可以解决此问题。

于 2013-08-02T11:56:03.923 回答
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)));
于 2013-08-05T13:17:58.110 回答