如何在 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("/omg", "newElement");
configuration.addProperty("//omg", "newElement");
configuration.addProperty("newElement", null);
configuration.addProperty("omg newElement", null);
我认为这是不可能的,但是像 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",因为您要添加到根元素并且要添加一个没有子元素的元素,而第二个参数的值是该元素,在您的例子中,它是一个空值。
所以我用 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("/omg", "newElement");
configuration.addProperty("//omg", "newElement");
configuration.addProperty("newElement", null);
configuration.addProperty("omg newElement", null);
我认为这是不可能的,但是像 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",因为您要添加到根元素并且要添加一个没有子元素的元素,而第二个参数的值是该元素,在您的例子中,它是一个空值。