Я действительно не хочу xsi: type = and
xmlns: xsi = чтобы появиться в моем финале
документ, так как это не нужно. Является
это возможно?
Я не уверен, почему xsi: type появляется для вас. Как видно из приведенного ниже примера, он обычно не отображается. Какие типы вещей отличаются в вашей модели от приведенного ниже примера?
Я бы предпочел не иметь
теги вообще -
если это просто список имен,
это было бы здорово.
Я считаю, что то, что вы ищете, может быть достигнуто с помощью аннотации @XmlValue. См. Свойство name в классе DesiredSkill ниже:
import java.util.*;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Root {
private List<DesiredSkill> employeeDesiredSkills = new ArrayList<DesiredSkill>();
public List<DesiredSkill> getEmployeeDesiredSkills() {
return employeeDesiredSkills;
}
public void setEmployeeDesiredSkills(List<DesiredSkill> employeeDesiredSkills) {
this.employeeDesiredSkills = employeeDesiredSkills;
}
}
и
import javax.xml.bind.annotation.XmlValue;
public class DesiredSkill {
private String name;
@XmlValue
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Тогда следующий код:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
Root root = new Root();
DesiredSkill cDev = new DesiredSkill();
cDev.setName("C Development");
root.getEmployeeDesiredSkills().add(cDev);
DesiredSkill perlDev = new DesiredSkill();
perlDev.setName("Perl Development");
root.getEmployeeDesiredSkills().add(perlDev);
JAXBContext jc = JAXBContext.newInstance(Root.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
Будет производить:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<employeeDesiredSkills>C Development</employeeDesiredSkills>
<employeeDesiredSkills>Perl Development</employeeDesiredSkills>
</root>