Добавить новый элемент в XML-файл с помощью Java DOM

1

Я работал с простым XML файлом каталога cd:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
</CATALOG>

С помощью этого метода я хочу создать новый элемент CD:

private static void addCd(File xml) throws ParserConfigurationException, TransformerConfigurationException, TransformerException, SAXException, IOException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse(xml);

        Element cd = document.createElement("CD");

        document.appendChild(cd);
        for (int i = 1; i <= 3; i++) {
            Element title = document.createElement("TITLE");
            Element artist = document.createElement("ARTIST");
            Element country = document.createElement("COUNTRY");
            Element company = document.createElement("COMPANY");
            Element price = document.createElement("PRICE");
            Element year = document.createElement("YEAR");


            title.appendChild(document.createTextNode("mike "));
            artist.appendChild(document.createTextNode("oconnor "));
            country.appendChild(document.createTextNode("ie "));
            company.appendChild(document.createTextNode("dell "));
            price.appendChild(document.createTextNode("14 "));
            year.appendChild(document.createTextNode("2014 "));

            cd.appendChild(title);
            cd.appendChild(artist);
            cd.appendChild(country);
            cd.appendChild(company);
            cd.appendChild(price);
            cd.appendChild(year);
        }

        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        DOMSource domSource = new DOMSource(document);
        StreamResult streamResult = new StreamResult(new File("cdCatalog.xml"));
        transformer.transform(domSource, streamResult);

        DOMSource source = new DOMSource(document);

    }

Я могу создать новый элемент CD, но новый элемент появляется за пределами моего корневого элемента (<CATALOG>):

<?xml version="1.0" encoding="utf-8" standalone="no"?><CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
</CATALOG><CD><TITLE>mike </TITLE><ARTIST>oconnor </ARTIST><COUNTRY>ie </COUNTRY><COMPANY>dell </COMPANY><PRICE>14 </PRICE><YEAR>2014 </YEAR><TITLE>mike </TITLE><ARTIST>oconnor </ARTIST><COUNTRY>ie </COUNTRY><COMPANY>dell </COMPANY><PRICE>14 </PRICE><YEAR>2014 </YEAR><TITLE>mike </TITLE><ARTIST>oconnor </ARTIST><COUNTRY>ie </COUNTRY><COMPANY>dell </COMPANY><PRICE>14 </PRICE><YEAR>2014 </YEAR></CD>

Я думаю, что я добавил неправильный элемент, но не знаю, как добавить в CATALOG.

Теги:
dom

2 ответа

3
Лучший ответ

Проблема в том, что вы добавили элемент по документу, вам нужно добавить CD из корневого элемента

Попробуйте вот так:

...
Document document = db.parse(xml);
Element root = document.getDocumentElement();
Element cd = document.createElement("CD");
root.appendChild(cd);
.....
......
....
1

Вы должны использовать getElementsByTagName чтобы получить первый тег catalog и добавить к нему свой объект cd, а не документ, как вы делаете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню