@olen.shanahan
Java предоставляет несколько способов для создания и чтения XML файлов. Давайте рассмотрим каждый из них по отдельности.
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 |
import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.File; public class XMLWriter { public static void main(String[] args) { try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); // Создание корневого элемента Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement("root"); doc.appendChild(rootElement); // Создание элемента Element element = doc.createElement("element"); rootElement.appendChild(element); // Создание и установка значения элемента Element subElement = doc.createElement("subelement"); subElement.appendChild(doc.createTextNode("value")); element.appendChild(subElement); // Запись содержимого в файл TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("file.xml")); transformer.transform(source, result); System.out.println("XML файл создан!"); } catch (Exception e) { e.printStackTrace(); } } } |
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 |
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; public class XMLReader { public static void main(String[] args) { try { File inputFile = new File("file.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); NodeList nodeList = doc.getElementsByTagName("element"); for (int temp = 0; temp < nodeList.getLength(); temp++) { Node node = nodeList.item(temp); if (node.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) node; System.out.println("Value: " + eElement.getElementsByTagName("subelement").item(0).getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } } |
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 |
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.File; import java.io.IOException; public class XMLWriter { public static void main(String[] args) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { boolean bElement = false; public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("Start Element: " + qName); bElement = true; } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("End Element: " + qName); } public void characters(char ch[], int start, int length) throws SAXException { if (bElement) { System.out.println("Value: " + new String(ch, start, length)); bElement = false; } } }; saxParser.parse(new File("file.xml"), handler); } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } } } |
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 |
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.File; public class XMLWriter { public static void main(String[] args) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Root.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); Root root = new Root(); root.setElement(new Element()); root.getElement().setSubElement("value"); marshaller.marshal(root, new File("file.xml")); } catch (JAXBException e) { e.printStackTrace(); } } } import javax.xml.bind.annotation.*; @XmlRootElement class Root { private Element element; @XmlElement public Element getElement() { return element; } public void setElement(Element element) { this.element = element; } } class Element { private String subElement; @XmlElement public String getSubElement() { return subElement; } public void setSubElement(String subElement) { this.subElement = subElement; } } |
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 |
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.File; public class XMLReader { public static void main(String[] args) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Root.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Root root = (Root) unmarshaller.unmarshal(new File("file.xml")); System.out.println("Value: " + root.getElement().getSubElement()); } catch (JAXBException e) { e.printStackTrace(); } } } import javax.xml.bind.annotation.*; @XmlRootElement class Root { private Element element; @XmlElement public Element getElement() { return element; } public void setElement(Element element) { this.element = element; } } class Element { private String subElement; @XmlElement public String getSubElement() { return subElement; } public void setSubElement(String subElement) { this.subElement = subElement; } } |
Эти примеры демонстрируют основные способы создания и чтения XML файлов в Java. Выбор подходящего метода зависит от требований вашего проекта.
@olen.shanahan
Благодарю за примеры. Вот небольшое дополнение к чтению XML файлов с использованием JAXB:
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 |
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement @XmlType(propOrder = {"name", "age"}) public class Person { private String name; private int age; @XmlElement public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement public int getAge() { return age; } public void setAge(int age) { this.age = age; } } |
Теперь, если в файле file.xml
будет XML такого формата:
1 2 3 4 |
<Person> <name>Alice</name> <age>30</age> </Person> |
Вы сможете прочитать его следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class XMLReader { public static void main(String[] args) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Person person = (Person) unmarshaller.unmarshal(new File("file.xml")); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } catch (JAXBException e) { e.printStackTrace(); } } } |
Таким образом, представление объектов Java в XML и наоборот становится гораздо удобнее с использованием JAXB.