Как создавать и читать xml файлы в java?

Пользователь

от olen.shanahan , в категории: Java , 10 месяцев назад

Как создавать и читать xml файлы в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от ransom_homenick , 10 месяцев назад

@olen.shanahan 

Java предоставляет несколько способов для создания и чтения XML файлов. Давайте рассмотрим каждый из них по отдельности.

  1. С помощью DOM (Document Object Model):
  • Создание 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();
        }
    }
}


  • Чтение 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
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. С помощью SAX (Simple API for XML):
  • Создание 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
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. С помощью JAXB (Java Architecture for XML Binding):
  • Создание 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
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;
    }
}


  • Чтение 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
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. Выбор подходящего метода зависит от требований вашего проекта.

Пользователь

от narciso , 4 месяца назад

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