2012-03-12 2 views
0

XML에서 값을 추출하고 적절한 객체로 변환하려고합니다 ... 값은 숫자/부울/문자열 일 수 있습니다. 예를 들어 ...check 문자열에서 객체 유형

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

XML에서 값을 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(); 
     } 
    }  
} 

감사합니다, 하산 : (. 즉, BigDecimal를/부울/문자열) 이 내가 솔루션으로 생각하고 것입니다.

+1

음이 나에게 좋아 보인다. 오류가 발생 했습니까? – Tudor

+0

오류 메시지가 나타나지 않습니다. 그것은 잘 작동합니다. 그러나 더 나은 해결책을 찾고 있습니다 (있는 경우). – Hasan

답변

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

0

XStream을 사용하지 않는 이유는 무엇입니까? 순수하게 XML에서 개체를 구성하기

(XStream을 이분 튜토리얼에서 인용 이하) :

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

을 그리고 그 XStream을 얼마나 간단 귀하의 경우는 매우 간단합니다!

2

더 많은 정보를 제공하지 않고이 문제를 해결하면 좋지 않은 솔루션이됩니다.

XML에 XSD을 제공하는 것이 좋습니다. XSD에는 데이터 유형을 포함하여 XML에 대한 메타 데이터가 포함되어 있습니다. XSD를 사용할 수있게되면 XML을 Java 객체로 변환 할 수있는 많은 옵션이 있습니다. (JAXB)

JAXB를 사용하면 XSD에서 Java 객체를 생성하거나 객체를 직접 작성하고 JAXB 주석을 사용하여 일부를 제공 할 수 있습니다 메타 데이터.