JAXB移除xsi和xmlns,继承关系,自定义头部

1、取消xsi和xmlns

     在变量标注@XmlElementRef即可

     (1)添加前

<a>
    <p xsi:type="student" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <name>hs</name>
        <age>11</age>
    </p>
</a>

    (2)添加后

<a>
    <p>
        <name>hs</name>
        <age>11</age>
    </p>
</a>

2、继承 

     在基类上标注@XmlSeeAlso({Student.class, Teacher.class}),并指明子类即可

3、自定义头部

     在输出时,自己把头部写进去,这样他会引用你自己写的head(前提设置Marshaller.JAXB_FRAGMENT为true)。

详情见下面代码:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class A {

    @XmlElementRef
    private People p;

    public People getP() {
        return p;
    }

    public void setP(People p) {
        this.p = p;
    }
}
import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso({Student.class, Teacher.class})
public class People {
}

import jdk.nashorn.internal.objects.annotations.Getter;
import jdk.nashorn.internal.objects.annotations.Setter;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Student extends People {
    @XmlElement(name = "name")
    private String name;

    @XmlElement(name = "age")
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Teacher extends  People{
    @XmlElement
    private String dada;

    public String getDada() {
        return dada;
    }

    public void setDada(String dada) {
        this.dada = dada;
    }
}
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

public class Test {
    public static void main(String[] args) throws JAXBException {
        A a = new A();
        Student s = new Student();
        s.setAge(11);
        s.setName("hs");
        a.setP(s);
        JAXBContext context = JAXBContext.newInstance(A.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        StringWriter writer = new StringWriter();
        writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
        marshaller.marshal(a, writer);
        System.out.println(writer.toString());
    }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值