У меня возникли проблемы с добавлением нового узла в существующий xml. Поэтому у меня есть этот код для создания первого элементаКак добавить новый узел в существующий XML
Здесь я настройки полей
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement (name = "books")
class Books {
private ArrayList<Book> books;
public Books(){
books = new ArrayList<>();
}
public void add(Book book){
books.add(book);
}
@XmlElement(name = "book")
public List<Book> getBooks() {
return books;
}
}
@XmlRootElement(name = "Book")
class Book {
// поля
@XmlAttribute(name="ganre")
String ganre;
@XmlElement
String bookName;
@XmlElement
String bookAuthor;
@XmlElement
int bookId;
@XmlElement
int bookYear;
@XmlElement
boolean bookAvailable;
public Book(){
}
public Book(String ganre, int bookId, String bookName, String bookAuthor, int bookYear, boolean bookAvailable){ // Конструктор чтобы быстрее создавать новые книги не напрягаясь
setGanre(ganre);
setBookId(bookId);
setBookName(bookName);
setBookAuthor(bookAuthor);
setBookYear(bookYear);
setBookAvailable(bookAvailable);
}
String getGanre(){
return this.ganre;
}
void setGanre(String ganre){
this.ganre = ganre;
}
String getBookName(){
return this.bookName;
}
void setBookName(String bookName){
this.bookName = bookName;
}
String getBookAuthor(){
return this.bookAuthor ;
}
void setBookAuthor (String bookAuthor){
this.bookAuthor = bookAuthor;
}
boolean getBookAvailable(){
return this.bookAvailable;
}
void setBookAvailable(boolean bookAvailable){
this.bookAvailable = bookAvailable;
}
int getBookId(){
return this.bookId;
}
void setBookId(int bookId){
this.bookId = bookId;
}
int getBookYear(){
return this.bookYear;
}
void setBookYear(int bookYear){
this.bookYear = bookYear;
}
}
Здесь я создание узлу
import org.xml.sax.SAXException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
public class TestingTest {
public static void main (String[] args) throws InterruptedException, ParserConfigurationException, SAXException, IOException, JAXBException {
File file = new File("D:\\books.xml");
Books bks = new Books();
bks.add(new Book(
"fantasy",
7111,
"Tron",
"Brawm",
15,
true
));
JAXBContext jaxbContext = JAXBContext.newInstance(Books.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(bks,file);
}}
Так Im пытается сделать переписать существующий файл и добавить новый узел в конец, но всегда просто переписывание первого узла
intput
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<books>
<book ganre="fantasy">
<bookName>Tron</bookName>
<bookAuthor>Brawm</bookAuthor>
<bookId>7111</bookId>
<bookYear>15</bookYear>
<bookAvailable>true</bookAvailable>
</book>
, что я хочу видеть после
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<books>
<book ganre="fantasy">
<bookName>Tron</bookName>
<bookAuthor>Brawm</bookAuthor>
<bookId>7111</bookId>
<bookYear>15</bookYear>
<bookAvailable>true</bookAvailable>
</book>
<book ganre="action">
<bookName>Corn</bookName>
<bookAuthor>Down</bookAuthor>
<bookId>312</bookId>
<bookYear>23</bookYear>
<bookAvailable>false</bookAvailable>
</book>
</books>
Было бы полезно добавить фактический XML и результат XML, который вы хотите достичь. Также я не вижу, где вы читаете и размонтируете существующий XML. – Rhayene
добавил результат, и чего я хочу добиться. – TheOriginalNickname