在我目前的项目中,我们正在重新分解构造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));
请帮助我选择正确的选项,同时牢记整个解决方案的性能方面。如果您有任何其他建议,请告诉我。
答案 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);
}