В предыдущих статья мы узнали как считывать XML-файл и как создавать новый XML файл. Сегодня мы научимся изменять / редактировать информацию в уже существующем XML файле. Для этого воспользуемся DOM XML Parser
, который может добавлять и удалять элементы, изменять значения элементов, а также редактировать атрибуты в XML документе. И таке, у нас есть готовый XML файл с языками программирования, который мы будем редактировать:
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Languages> <Language id="1"> <name>Java</name> <age>21</age> </Language> <Language id="2"> <name>C++</name> <age>33</age> </Language> </Languages> |
Мы изменим следующие данные в исходном XML файле:
- Обновить значение элемента «name» для всех узлов Language
- Добавить новый элемент «paradigm» всем узлам Language в XML.
- После этого сохраним этот документ в другой XML файл.
Ниже представлена программа на Java, которая внесет вышеперечисленные изменения с помощью DOM XML Parser:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
package ua.com.prologistic; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DOMxmlEdit { public static void main(String[] args) { String filePath = "language.xml"; File xmlFile = new File(filePath); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { builder = factory.newDocumentBuilder(); Document doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); // обновляем значения updateElementValue(doc); // добавляем новый элемент addElement(doc); // запишем отредактированный элемент в файл // или выведем в консоль doc.getDocumentElement().normalize(); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("languageUpdated.xml")); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); System.out.println("XML успешно изменен!"); } catch (Exception exc) { exc.printStackTrace(); } } // добавили элемент paradigm private static void addElement(Document doc) { NodeList languages = doc.getElementsByTagName("Language"); Element lang = null; //проходим по каждому элементу Language for(int i=0; i<languages.getLength(); i++){ lang = (Element) languages.item(i); Element paradigmElement = doc.createElement("paradigm"); paradigmElement.appendChild(doc.createTextNode("oop")); lang.appendChild(paradigmElement); } } // изменяем значение существующего элемента name private static void updateElementValue(Document doc) { NodeList languages = doc.getElementsByTagName("Language"); Element lang = null; // проходим по каждому элементу Language for(int i=0; i<languages.getLength();i++){ lang = (Element) languages.item(i); Node name = lang.getElementsByTagName("name").item(0).getFirstChild(); name.setNodeValue(name.getNodeValue().toUpperCase()); } } } |
Результат выполнения программы редактирования XML файла с помощью DOM Parser:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Languages> <Language id="1"> <name>JAVA</name> <age>21</age> <paradigm>oop</paradigm> </Language> <Language id="2"> <name>C++</name> <age>33</age> <paradigm>oop</paradigm> </Language> </Languages> |
На этом наше знакомство с DOM XML Parser в Java подходит к концу. Следите за другими статьями раздела Работа с XML.