XML的反序列化在Java中的SimpleXML [英] Deserialization of xml with simplexml in java

查看:248
本文介绍了XML的反序列化在Java中的SimpleXML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图反序列化的XML字符串用SimpleXML,我看着他们的例子,但我真的不知道那阉我掌握的概念或没有。

I'm trying to deserialize an xml string with SimpleXML, i've looked at their examples but i'm not really sure that wether i grasp the concept or not.

示例XML(void验证):

Sample XML (validates):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Response xmlns="http://localhost/webservices/">
<Result>
<Item><ID>0</ID><language /><price>168</price></Item>
<Item><ID>1</ID><language /><price>178</price></Item>
<Item><ID>2</ID><language /><price>195</price></Item>
<Item><ID>3</ID><language /><price>169</price></Item>
<Item><ID>4</ID><language /><price>178</price></Item>
<Item><ID>5</ID><language /><price>178</price></Item>
<Item><ID>6</ID><language /><price>149</price></Item>
<Item><ID>7</ID><language /><price>178</price></Item>
<Item><ID>8</ID><language /><price>168</price></Item>
<Item><ID>9</ID><language /><price>179</price></Item>
<Item><ID>10</ID><language /><price>147</price></Item>
<Item><ID>11</ID><language /><price>165</price></Item>
<Item><ID>12</ID><language /><price>192</price></Item>
<Item><ID>13</ID><language /><price>218</price></Item>
<Item><ID>14</ID><language /><price>144</price></Item>
<Item><ID>15</ID><language /><price>141</price></Item>
</Result>
</Response>
</soap:Body></soap:Envelope>

和Java code:

And the java code:

    @Root(name="Result",strict=false)
public class ItemList {

    @ElementList(entry="Item")
    private List<Item> _list;

    public List<Book> GetItemList() 
    {
        return _list;
    }

    public void SetItemList(List<Item> value) 
    {
        this._list = value; 
    }
}

@Root(strict=false)
public class Item {
    @Element(name="ID")
    private String _ID;
    @Element(name="price")
    private String _price;


    public String GetPrice()
    {
        return _price;
    }

    public void SetPrice(String value)
    {
        this._price = value;
    }

    public String GetID()
    {
        return _ID;
    }

    public void SetID(String value) 
    {
        this._ID = value;
    }

    public Item(String ID,
                String price) 
    {
        this._ID = ID;
        this._price = price;
    }
}

任何帮助是AP preciated。

Any help is appreciated.

推荐答案

我有一个建议,但它没有准备好运行(见下文)。然而,也许疗法另外,更好的解决方案...

I have a suggestion, but it's not ready to run (see below). However, ther maybe another, better solution ...

保持所有信息。

@Root(name="Item")
public class Item
{
    @Element(name="ID", required=true)
    private int id;
    @Element(name="language", required=true)
    private String language;
    @Element(name="price", required=true)
    private int price;


    // ...
}

类结果

围绕项目建设的一切。顺便说一句。你不必在这里使用内部类。

Class Result

Constructing everything around Item. Btw. you dont have to use inner classes here.

@Namespace(prefix="soap", reference="http://schemas.xmlsoap.org/soap/envelope/")
@Root(name="Envelope")
public class Result
{
    @Namespace(prefix="soap")
    @Element(name="Body")
    private SoapBody body;


    // ...


    // -----------------------------------------------------------------
    // -- Some inner classes, constructing the elements as in you xml --
    // -----------------------------------------------------------------


    @Namespace(prefix="soap")
    @Root(name="Body")
    static class SoapBody
    {
        @Element(name="Response")
        private Response response;


        // ...
    }



    @Root(name="Response")
    static class Response
    {
        @ElementList(name="Result", required=true)
        private List<Item> result;


        // ...
    }
}

(例)如何使用code

File f = ...

Serializer ser = new Persister();
Result r = new Result();
ser.write(r, f);

阅读

File f = ...

Serializer ser = new Persister();
Result r = ser.read(Result.class, f);


现在......有一个问题其中prevents这个例子中运行:&LT;语言/&GT;
该空元素让SimpleXML的抛出一个 ValueRequiredException

这篇关于XML的反序列化在Java中的SimpleXML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆