我从XML中提取值并尝试将其转换为适当的对象...可以说,value可以是numeric / boolean / String。 举个例子......
<value> 123 </value>
<value> TRUE </value>
<value> some Strings </value>
我正在将XML中的值读取为String。知道什么是将String转换为适当的java对象的最佳方法? (即BigDecimal / Boolean / String) 这就是我正在考虑的解决方案:
private Object convertParameterValIntoObject(String value){
Object toreturn = null;
BigDecimal numeric = null;
Boolean boo = null;
try{
//deal with numeric val
numeric = new BigDecimal(value.trim());
return numeric;
}
catch (NumberFormatException e) {
try{
//deal with Boolean
if(value.trim().equalsIgnoreCase("true") ||
value.trim().equalsIgnoreCase("false")){
boo = new Boolean(value.trim());
return boo;
}
else throw new Exception();
}
catch (Exception e1) {
// String
return value.trim();
}
}
}
提前致谢, 哈桑。
答案 0 :(得分:2)
在不提供更多信息的情况下解决此问题将导致解决方案不良。
我强烈建议为您的XML提供XSD,XSD包含有关您的XML的元数据,包括数据类型。一旦XSD可用,您就有很多选择将XML转换为Java对象(我推荐JAXB)
使用JAXB,您可以从XSD生成Java对象,或者自己编写对象并使用JAXB注释来提供一些元数据。
答案 1 :(得分:2)
您可以使用java.util.Scanner,它具有您需要的所有类型检测。这是一个有效的例子。您需要确保从最具体到最不具体的类型进行探测,这里我测试boolean,然后是number,然后是string。
String[] testValues = { "123", "123.4", "FALSE", "false",
"some strings" };
for (String test : testValues) {
Scanner scanner = new Scanner(test);
scanner.useDelimiter("^");
if (scanner.hasNextBoolean()) {
boolean value = scanner.nextBoolean();
System.out.println("boolean " + value);
} else if (scanner.hasNextDouble()) {
double value = scanner.nextDouble();
System.out.println("number " + value);
} else if (scanner.hasNext(".*")) {
String value = scanner.next();
System.out.println("string " + value);
}
}
输出
number 123.0
number 123.4
boolean false
boolean false
string some strings
答案 2 :(得分:0)
为什么不使用XStream?在你的情况下,它将非常简单:(在XStream 2分钟教程的引用下面)
构建一个纯粹来自XML的对象:
Person newJoe = (Person)xstream.fromXML(xml);
这就是XStream的简单!