在 apache commons-configurations2 中格式 XML output/modify Transformer

Format XML output/modify Transformer in apache commons-configurations2

我正在尝试从旧的 commons-configuration 迁移到 commons-configuration2,但在使用新的 Configurations 构建器时,我无法使用缩进格式化 XML 输出。

之前我是这样做的,效果很好。

XMLConfiguration configuration = new XMLConfiguration()
{
    @Override
    protected Transformer createTransformer()
        throws ConfigurationException
    {
        Transformer transformer = super.createTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("http://xml.apache.org/xslt}indent-amount", "4");
        return transformer;
    }
};

但在 commons-configurations2 中,您使用 ConfigurationBuilder 来获取 XMLConfiguration 实例,这会移除创建 XMLConfiguration 子类的能力,例如:

XMLConfiguration configuration = configurations
        .xmlBuilder(new File("config.xml"))
        .getConfiguration();

有没有其他方法可以自定义 XMLConfiguration 的转换器?

谢谢!

我是这样解决的。

创建一个扩展 XMLConfiguration 的新 class:

public class PrettyXMLConfiguration
    extends XMLConfiguration
{
    @Override
    protected Transformer createTransformer()
        throws ConfigurationException
    {
        Transformer transformer = super.createTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(
            "{http://xml.apache.org/xslt}indent-amount", "4");
        return transformer;
    }
}

改为像这样创建 XMLConfiguration:

XMLConfiguration builder = new Configurations()
        .fileBasedBuilder(PrettyXMLConfiguration.class, new File("config.xml"))
        .getConfiguration();

或更简单:

XMLConfiguration builder = new Configurations()
    .fileBased(PrettyXMLConfiguration.class, new File("config.xml"));