2012-03-12 36 views
0

我從XML中提取值並嘗試將其轉換爲適當的對象...可以說,值可以是數值/布爾值/字符串。 作爲示例...檢查字符串中的對象類型

<value> 123 </value> 
<value> TRUE </value> 
<value> some Strings </value> 

我正在讀取XML作爲字符串的值。任何想法什麼是將字符串轉換爲適當的java對象的最佳方法? (即BigDecimal的/布爾/字符串) 這是我想作爲一個解決方案:

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(); 
     } 
    }  
} 

在此先感謝, 哈桑。

+1

嗯,這似乎沒給我。你遇到任何錯誤? – Tudor 2012-03-12 16:06:12

+0

我沒有收到任何錯誤。它工作正常。但是,尋找更好的解決方案(如果有的話)。 – Hasan 2012-03-12 16:43:48

回答

2

您可以使用java.util.Scanner,它具有您需要的所有類型檢測。這是一個工作示例。你需要確保你從最特定的類型到最不具體的類型,在這裏我測試布爾值,然後是數字,然後是字符串。

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 
+0

謝謝,不錯的解決方案。 – Hasan 2012-03-12 16:53:27

0

爲什麼不使用XStream?你的情況,這將是非常簡單的:(報價低於從XStream的2分鐘教程)

要構造一個對象,單純從XML:

Person newJoe = (Person)xstream.fromXML(xml); 

這就是XStream的是多麼簡單!

2

解決此問題而不提供更多信息將導致一個不好的解決方案。

我強烈建議爲您的XML提供XSD,XSD包含有關您的XML的元數據(包括數據類型)。一旦XSD可用,您有許多選項可將XML轉換爲Java對象(我推薦JAXB

使用JAXB,您可以從XSD生成Java對象,或者自己編寫對象並使用JAXB註釋來提供一些元數據。