使用JAXB XML数据编(XML unmarshalling using JAXB)

2019-08-16 17:05发布

我有我试图解组XML文件,但我无法弄清楚如何做到这一点。

XML是什么样子

<config>
    <params>
        <param>
            <a>draft</a>
            <b>Serial</b>
        </param>
        <param>
            <a>amt</a>
            <b>Amount</b>
        </param>
    </params>
    <server>
        <scheme>http</scheme>
        <host>somehost.com/asdf</host>
    </server>
</config>

我可以当我有PARAMS根元素,并没有在服务器元素或作为配置根元素之前和解组。

我添加了一个配置类,试图来解读这一点,但我不知道我要去哪里错了。

我班的样子

@XmlRootElement
public class Config {

    private Params params = new Params();

    @XmlElement(name="params")
    public Params getParams() {
        return params;
    }
    public void setParam(Params params) {
        this.params = params;
    }
}

public class Params {
    private List<Param> params = new ArrayList<Param>();

    public List <Param> getParam() {
        return params;
    }

    public void setParam(List<Param> params) {
        this.params = params;
    }
}

public class Param {
    String a;
    String b;        
    //getters and setters.  omitted for brevity     
}   

解组代码

File file = new File("C:\\config.xml");
InputStream inputStream = new FileInputStream(file);
JAXBContext jc = JAXBContext.newInstance(Config.class);
Unmarshaller u = jc.createUnmarshaller();
conf = (Config) u.unmarshal(file);
System.out.println(conf.getParams().getParam().size());

println的打印0.1在哪里我会错呢?

我知道我没有对服务器节点的任何代码还没有,还没有到达那里呢。 我实际的XML可是没有那个节点还没有,我仍然不能得到它正确的配置标签内,当解组PARAMS。

Answer 1:

你只需做以下修改,它会工作。 更改setParams方法来配置

@XmlElement(name = "params") //<--Annotation added here
public void setParam(Params params) {
    this.params = params;
}


Answer 2:

尝试

@XmlRootElement
class Config {
    private List<Param> params = new ArrayList<Param>();

    @XmlElementWrapper
    @XmlElement(name="param")
    public List<Param> getParams() {
        return params;
    }

    public void setParams(List<Param> params) {
        this.params = params;
    }
}

class Param {
    String a;
    String b;
          ...
}


Answer 3:

我认为无论是帕拉姆和它的包装应该是unmarsh。 你刚才unmarsh的list.But帕拉姆模式也需要进行unmarshed。



Answer 4:

默认情况下, JAXB(JSR-222)的映射实现将把所有的公共字段和属性。 一个属性被认为具有匹配get / set的方法。 你只需要改变setParam的方法ConfigsetParams相匹配的getParams方法。

@XmlRootElement
public class Config {

    private Params params = new Params();

    public Params getParams() {
        return params;
    }
    public void setParams(Params params) {
        this.params = params;
    }

}


文章来源: XML unmarshalling using JAXB