Мне нужно создать XML-файл со следующей структурой:JAXB: Создать атрибут для внутреннего элемента
<Persons>
<Person ID="1">
<Name></Name>
...
</Person>
<Person ID="2">
<Name></Name>
...
</Person>
...
</Persons>
Я уже перепробовал все решения на переполнение стека, используя *@XmlPath("/Person/@ID")*
, *@XmlAttribute(name="ID")*
по-разному и не имели никакого успеха. Мой код создает атрибут в корневом узле или создает дополнительный узел до Лицо узел. Но атрибут должен быть внутри Person узел
Метод в Main.class:
public void savePersonDataToFile(File file) {
try {
JAXBContext context = JAXBContext
.newInstance(PersonListXMLWrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Wrapping our person data.
PersonListXMLWrapper wrapper = new PersonListXMLWrapper();
wrapper.setPersons(personData);
// Marshalling and saving XML to the file.
m.marshal(wrapper, file);
// Save the file path to the registry.
setPersonFilePath(file);
} catch (Exception e) { // catches ANY exception
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Cant save to file:\n" + file.getPath());
alert.setContentText("Ooops, there was an error!");
}
}
Person.class имеет объявления переменных, методы для изменения и получать их и конструктор:
public class Person {
private final IntegerProperty ID;
private final StringProperty name;
private final StringProperty surname;
private final StringProperty prevSurname;
private final StringProperty patronymic;
...
PersonListXMLWrapper . класс:
@XmlRootElement(name = "Persons")
public class PersonListXMLWrapper {
private List<Person> persons;
@XmlElement(name = "Person")
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
@XmlPath("/Person/@IDAtt")
public String IDAtt ="123";
@XmlAttribute(name="ID")
public String getID() {
return IDAtt;
}
public void setID(String ID) {
this.IDAtt = ID;
}
}
Пробовали ли вы ElementWrapper как следующее @XmlElementWrapper (имя = "persons") @XmlElement (name = "person") Список человек; –