0

文字列xmlをJavaオブジェクトに解析/umarshalingする初心者です。文字列 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 に答える