@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.