如何在 Apache Commons 配置中使用 addProperty() 将新的 XML 元素添加到分层 XML 配置的根元素?

How to add new XML element to the root element of a hierarchical XML configuration with addProperty() in Apache Commons Configuration?

所以我用 XPathExpressionEngine 试了一下,但没用。 我的 XML 文件如下所示。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<omg>
  <configurationCreated>24/05/20 00:43:42</configurationCreated>
</omg>

我希望最终结果是这样的。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<omg>
  <configurationCreated>24/05/20 00:43:42</configurationCreated>
  <newElement />
</omg>

我试过了。

Parameters parameters = new Parameters();

FileBasedConfigurationBuilder<XMLConfiguration> builder = new FileBasedConfigurationBuilder<XMLConfiguration>(XMLConfiguration.class)
    .configure(parameters
        .xml()
        .setFileName("mahfile.xml")
        .setExpressionEngine(new XPathExpressionEngine()));

builder.setAutoSave(true);

try {
  configuration = builder.getConfiguration();
} catch (ConfigurationException e) {
  return;
}

configuration.addProperty("omg", "newElement");

然而结果是这样的(这到底是怎么回事)。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<omg>
  <configurationCreated>24/05/20 00:43:42</configurationCreated>
  <omg>newElement</omg>
</omg>

我还使用 addProperty() 方法尝试了以下 XPath 表达式,但没有任何效果。我该如何正确地做到这一点? Documentation 在这里没有帮助。

我认为这是不可能的,但是像 configuration.addProperty("newElement/childElement/name", "value") 这样的表达式会创建新元素但其中有一个子元素。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<omg>
  <configurationCreated>24/05/20 00:43:42</configurationCreated>
  <newElement>
    <childElement>
       <name>value</name>
    </childElement>
  </newElement>
</omg>

旁注:我还尝试了 configuration.getDocument().createElement("newElement") 但这不会自动保存我的配置文件。

根据您链接的文档页面,this page 您可以使用以下方法实现您的目标:

configuration.addProperty("newElement", "");

您不必在第一个参数中指定任何 "structure",因为您要添加到根元素并且要添加一个没有子元素的元素,而第二个参数的值是该元素,在您的例子中,它是一个空值。