在apache commons-configurations2中格式化XML输出/修改Transformer

时间:2017-10-11 12:09:17

标签: java xml apache-commons-config

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

谢谢!

1 个答案:

答案 0 :(得分:2)

以下是我如何解决它。

创建一个扩展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"));