@olen.shanahan
Java предоставляет несколько способов для создания и чтения XML файлов. Давайте рассмотрим каждый из них по отдельности.
- С помощью DOM (Document Object Model):
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();
}
}
}
|
- С помощью SAX (Simple API for 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();
}
}
}
|
- С помощью JAXB (Java Architecture for XML Binding):
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. Выбор подходящего метода зависит от требований вашего проекта.