0

我是解析/编组字符串 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>

我注意到stackoverflow正在删除根元素,即“字符串”,只显示
<?xml version="1.0" encoding="utf-8" ?> <MyList> <Obj>Im obj 1</Obj> <Obj>如果我没有将此字符串 xml 放在代码块中,我会立即 obj 2</Obj> </MyList>。

我正在尝试使用 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
4

1 回答 1

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 );
    }
}
于 2013-11-15T06:51:10.787 回答