2013-11-15 89 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