2013-11-15 111 views
0

Im新手上解析/ umarshalling字符串xml到java對象。我只想知道如何獲取字符串xml中的字符串xml並將其轉換爲java對象。如何將字符串xml中的字符串xml解析/解組爲Java對象?

下面是從一個HTTP GET我的字符串的xml:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">&lt;?xml version="1.0" encoding="utf-8" ?  
&gt;&lt;MyList&gt;&lt;Obj&gt;Im obj 1&lt;/Obj&gt;&lt;Obj&gt;Im obj  
1&lt;/Obj&gt;&lt;/MyList&gt;</string> 

我注意到計算器被去除根元素,其是「字符串」並只顯示
< XML版本=「1.0」編碼=? 「utf-8」? > <MYLIST> <的OBJ >林OBJ 1 < /的OBJ > <的OBJ >林物鏡2 < /的OBJ > </MYLIST > 立即如果我沒有把該字符串的XML代碼塊的內部。

我想使用JDom 2,但沒有運氣。它只得到根元素,但不是孩子。

我也用JAXB:

我可以得到根元素,但沒有孩子。這裏是我的代碼:

JAXBContext jc = JAXBContext.newInstance(myPackage.String.class);   
Unmarshaller unmarshaller = jc.createUnmarshaller(); 
JAXBElement<MyList> jaxbElement = unmarshaller.unmarshal(new StreamSource(new 
ByteArrayInputStream(byteArray)), MyList.class); 

System.out.println(jaxbElement.getClass()); --> this will print myPackage.MyList             

MyList myList = (MyList) jaxbElement.getValue(); 
System.out.println("myList.Obj = " + myList.getObjs().size()); --> this will return 0 
+0

請格式化XML。另外,你真的得到那些'>'和'&lt;字符引用,或者是複製粘貼中的錯誤的人工產物? – kjhughes

+0

這是我從http-get響應中獲得的實際字符串xml。我應該使用什麼樣的格式?謝謝 – ice

回答

0

我剛剛得到一個JAXB變種工作:

public class XmlParser 
{ 
    @XmlRootElement(name = "string", namespace = "http://tempuri.org/") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    static class MyString 
    { 
     @XmlValue 
     String string; 
    } 

    @XmlRootElement(name = "MyList") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    static class MyList 
    { 
     @XmlElement(name = "Obj") 
     List<String> objs = new ArrayList<>(); 
    } 

    public static void main(String[] args) throws JAXBException 
    { 
     String s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
       + "<string xmlns=\"http://tempuri.org/\">&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?&gt;&lt;MyList&gt;&lt;Obj&gt;Im obj 1&lt;/Obj&gt;&lt;Obj&gt;Im obj1&lt;/Obj&gt;&lt;/MyList&gt;</string>"; 

     JAXBContext context = JAXBContext.newInstance(MyString.class, MyList.class); 
     Unmarshaller unmarshaller = context.createUnmarshaller(); 

     MyString myString = (MyString) unmarshaller.unmarshal(new StringReader(s)); 
     MyList myList = (MyList) unmarshaller.unmarshal(new StringReader(myString.string)); 

     System.out.println(myList.objs); 
    } 
} 
+0

嗨,最大,我試過你的解決方案,它的工作原理! +2給你!你的MyString類和你解開的方式是我缺失的鏈接。 – ice