我正在尝试从旧的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的Transformer的方法吗?

谢谢!

最佳答案

这是我解决的方法。

创建一个扩展XMLConfiguration的新类:

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"));

10-08 07:18