简体   繁体   中英

How to append new nodes to an existing xml file

Hello Im new in useing xml and now trying to append new nodes for existing xml file.

This is my code to write a xml

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBulder = docFactory.newDocumentBuilder();

                //root mainElement
                Document doc = docBulder.newDocument();
                Element rootElement = doc.createElement("Books");
                doc.appendChild(rootElement);

                //root Book
                Element Book = doc.createElement("Book");
                rootElement.appendChild(Book);

                //setting ganre for a book
                Attr att = doc.createAttribute("ganre");
                att.setValue(ganre);
                Book.setAttributeNode(att);

                //book id
                Element bookId = doc.createElement("bookId");
                bookId.appendChild(doc.createTextNode(randomString(4)));
                Book.appendChild(bookId);

                //bookname element
                Element bookname = doc.createElement("bookName");
                bookname.appendChild(doc.createTextNode(name));
                Book.appendChild(bookname);

                //book author
                Element bookAuthor = doc.createElement("bookAuthor");
                bookAuthor.appendChild(doc.createTextNode(author));
                Book.appendChild(bookAuthor);

                //book year
                Element bookYear = doc.createElement("bookYear");
                bookYear.appendChild(doc.createTextNode(String.valueOf(year)));
                Book.appendChild(bookYear);

                //book available
                Element bookAvail = doc.createElement("bookAvailable");
                bookAvail.appendChild(doc.createTextNode(String.valueOf(free)));
                Book.appendChild(bookAvail);

                //write in a XMLFile
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(doc);
                StreamResult result = new StreamResult(new File("Test/Books.xml"));

                transformer.transform(source, result);

                System.out.println("File saved!");

this is how I trying to append new nodes

     File fXmlFile = new File("Test/Books.xml");
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(fXmlFile);

                    Node books = doc.getFirstChild();


                    Element newBook = doc.createElement("Book");

[here the troubles comes]

what i want to do is rewrite file like this:

    <Books>
    <Book ganre="fantasy">
    <bookId>7111</bookId>
    <bookName>Tron</bookName>
    <bookAuthor>Brawm</bookAuthor>
    <bookYear>15</bookYear>
    <bookAvailable>true</bookAvailable>
    </Book>

    <Book ganre="action">
    <bookId>312</bookId>
    <bookName>Corn</bookName>
    <bookAuthor>Down</bookAuthor>
    <bookYear>23</bookYear>
    <bookAvailable>false</bookAvailable>
    </Book>
    </Books>

but every time Im can only rewrite or damage the xml file. ps Im getting all my bookName's and so on from the input

I can just suggest to use the JDom library. Its very easy to use and implement, always worked for me.

JDOM is, quite simply, a Java representation of an XML document. JDOM provides a way to represent that document for easy and efficient reading, manipulation, and writing. It has a straightforward API, is a lightweight and fast, and is optimized for the Java programmer. It's an alternative to DOM and SAX, although it integrates well with both DOM and SAX.

There are some good tutorials at mykong.com explaining how to read, modify and create xml-files :

http://www.mkyong.com/java/how-to-modify-xml-file-in-java-jdom/

problem was solved. My solution is:

                File fXmlFile = new File("Test/Books.xml");
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(fXmlFile);

//                doc.getDocumentElement().normalize();

                Element nList = doc.getDocumentElement();

                System.out.println("-----------------------");

                //root a new book
                Element newBook = doc.createElement("Book");

                //setting ganre for a book
                Attr att = doc.createAttribute("ganre");
                att.setValue(ganre);
                newBook.setAttributeNode(att);

                //book id
                Element bookId = doc.createElement("bookId");
                bookId.appendChild(doc.createTextNode(randomString(4)));
                newBook.appendChild(bookId);

                //bookname element
                Element bookname = doc.createElement("bookName");
                bookname.appendChild(doc.createTextNode(name));
                newBook.appendChild(bookname);

                //book author
                Element bookAuthor = doc.createElement("bookAuthor");
                bookAuthor.appendChild(doc.createTextNode(author));
                newBook.appendChild(bookAuthor);

                //book year
                Element bookYear = doc.createElement("bookYear");
                bookYear.appendChild(doc.createTextNode(String.valueOf(year)));
                newBook.appendChild(bookYear);

                //book available
                Element bookAvail = doc.createElement("bookAvailable");
                bookAvail.appendChild(doc.createTextNode(String.valueOf(free)));
                newBook.appendChild(bookAvail);

                nList.appendChild(newBook);

                Transformer transformer = TransformerFactory.newInstance().newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");

                //initialize StreamResult with File object to save to file
                StreamResult result = new StreamResult(new File("Test/Books.xml"));
                DOMSource source = new DOMSource(doc);
                transformer.transform(source, result);
                System.out.println("DONE");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM