以小写或TitleCase构建XML文档 - 基于标志

时间:2014-08-07 15:23:14

标签: java xml enums constants

在我目前的项目中,我们正在重新分解构造XML文档的java类。在交付给客户的产品的早期版本中,XML文档使用小写元素和属性构建:

<rootElement attr = "abc">
    <childElement childAttr = "xyz"/>
</rootElement>

但是现在我们需要使用TitleCase元素和属性构建XML文档。用户将在属性文件中设置一个标志,以指示文档是以小写还是标题大小写。如果该标志配置为在TitleCase中构建文档,则生成的文档将如下所示:

<RootElement Attr = "abc">
    <ChildElement ChildAttr = "xyz">
</RootElement>

解决问题的各种方法:
1.插入变换器以将小写XML文档转换为TitleCase XML文档。但是这将影响整体性能,因为我们处理的跨越10,000行的巨大XML文件。

2.使用corr创建两个单独的映射。 XML元素和属性。
例如:
lowercase map: rootelement -> rootElement, attr -> attr ....
TitelCase map: rootlement -> RootElement, attr -> Attr ....
基于用户设置的属性,corr。将选择map,并使用此映射中的XML元素/属性来构建XML文档。

3.使用枚举来定义常量及其变量。值。

public enum XMLConstants {
    ROOTELEMENT("rootElement", "RootElement"),
    ATTRIBUTE("attr", "Attr");

    private String lowerCase;
    private String titleCase;

    private XMLConstants(String aLowerCase, String aTitleCase){
        titleCase = aTitleCase;
        lowerCase = aLowerCase;
    }

    public String getValue(boolean isLowerCase){
        if(isLowerCase){
            return lowerCase;
        } else {
            return titleCase;
        }
    }
}

--------------------------------------------------------------

// XML document builder

if(propertyFlag){
    isLowerCase = false;
} else {
    isLowerCase = true;
}

....
....

createRootElement(ROOTELEMENT.getValue(isLowerCase));
createAttribute(ATTRIBUTE.getValue(isLowerCase));

请帮助我选择正确的选项,同时牢记整个解决方案的性能方面。如果您有任何其他建议,请告诉我。

1 个答案:

答案 0 :(得分:0)

// set before generate XML
boolean isUpperCase;

// use function for each tag/attribute name instead of string constant
// smth. like getInCase("rootElement")
String getInCase(String initialName) {
    String intialFirstCharacter = initialName.substring(0, 1);
    String actualFirstCharacter;
    if (isUpperCase) {
        actualFirstCharacter = intialFirstCharacter.toUpperCase();
    } else {
        actualFirstCharacter = intialFirstCharacter.toLowerCase();
    }
    return actualFirstCharacter + initialName.substring(1);

}