项目开发日记:jaxb解析XML

最新开发项目时遇到了一个需要解析XML的场景,此文用于记录开发过程遇到的一些问题和经验

一、常用注解

此处只记录一些较为必用的注解和属性,想看全又详细的可以参考

JAXB常用注解讲解(超详细) - 哩个啷个波 - 博客园

1.@XmlRootElement(name="XXX")

用于标识从根节点,即从XML的哪个节点开始解析,在类名上标识

2.@XmlElement(name="XXX")

用于标识字段对应的根节点,在字段/get/set上标识

3.@XmlElementWrapper(name="XXX")

为数组或集合定义一个父节点,在字段/get/set上标识

二、举例

以如下XML为示例

<test>
	<f1>111</f1>
	<f2>222</f2>
	<f3>222</f3>
	<fss>
		<fs>
			<ff1>11</ff1>
			<ff2>22</ff2>
			<ff3>33</ff3>
		</fs>
		<fs>
			<ff1>44</ff1>
			<ff2>55</ff2>
			<ff3>66</ff3>
		</fs>
	</fss>
</test>

其需要编写的类总共为两个


import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement(name="test")
public class testHead {
    private String f1;
    private String f2;
    private String f3;
    private List<testFs>  fss;

    @XmlElement(name="f1")
    public String getF1() {
        return f1;
    }

    public void setF1(String f1) {
        this.f1 = f1;
    }

    @XmlElement(name="f2")
    public String getF2() {
        return f2;
    }

    public void setF2(String f2) {
        this.f2 = f2;
    }

    @XmlElement(name="f3")
    public String getF3() {
        return f3;
    }

    public void setF3(String f3) {
        this.f3 = f3;
    }

    @XmlElementWrapper(name="fss")
    @XmlElement(name="fs")
    public List<testFs> getFss() {
        return fss;
    }

    public void setFss(List<testFs> fss) {
        this.fss = fss;
    }
}

import javax.xml.bind.annotation.XmlElement;

public class testFs {
    private String ff1;
    private String ff2;
    private String ff3;

    @XmlElement(name="ff1")
    public String getFf1() {
        return ff1;
    }

    public void setFf1(String ff1) {
        this.ff1 = ff1;
    }

    @XmlElement(name="ff2")
    public String getFf2() {
        return ff2;
    }

    public void setFf2(String ff2) {
        this.ff2 = ff2;
    }

    @XmlElement(name="ff3")
    public String getFf3() {
        return ff3;
    }

    public void setFf3(String ff3) {
        this.ff3 = ff3;
    }
}

三、XML解析代码

 public testHead xmlToJava(String xml) throws JAXBException {
		 StringReader reader = new StringReader(xml);
		 JAXBContext jaxbContext = JAXBContext.newInstance(testHead.class);
		 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
		 testHead act = (testHead) jaxbUnmarshaller.unmarshal(reader);
		 return act;
	 }

四、注意事项

1.@XmlRootElement只能存在于JAXBContext.newInstance使用的类中,其余衍生套用的类无需重复声明,不然会报错

2.xml中的<fss>节点由@XmlElementWrapper(name="fss")对应,无实际字段

3.未在XML中标注节点类型的字段尽量使用String类型,不然容易造成解析不到值

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值