Java 读写XML
XML(可扩展标记语言)是一种常用的数据交换格式,被广泛应用于Web服务和配置文件等领域。在Java中,我们可以使用各种库和API来读写XML。本文将介绍如何使用Java代码读取和写入XML文件,并提供示例代码。
读取XML文件
Java提供了多种方式来读取XML文件,其中最常用的是DOM(文档对象模型)和SAX(简单API for XML)。以下是使用DOM和SAX读取XML文件的示例代码。
使用DOM读取XML文件
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ReadXMLUsingDOM {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("example.xml");
Element root = document.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("book");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String title = element.getElementsByTagName("title").item(0).getTextContent();
String author = element.getElementsByTagName("author").item(0).getTextContent();
System.out.println("Title: " + title);
System.out.println("Author: " + author);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述代码使用DOM解析器读取名为"example.xml"的XML文件。首先,我们获取XML文档的根元素,然后遍历所有的"book"元素,并获取其子元素"title"和"author"的值。
使用SAX读取XML文件
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class ReadXMLUsingSAX {
public static void main(String[] args) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean isTitle = false;
boolean isAuthor = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("title")) {
isTitle = true;
}
if (qName.equalsIgnoreCase("author")) {
isAuthor = true;
}
}
public void characters(char ch[], int start, int length) throws SAXException {
if (isTitle) {
System.out.println("Title: " + new String(ch, start, length));
isTitle = false;
}
if (isAuthor) {
System.out.println("Author: " + new String(ch, start, length));
isAuthor = false;
}
}
};
saxParser.parse("example.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述代码使用SAX解析器读取名为"example.xml"的XML文件。我们创建了一个继承自DefaultHandler
的处理程序,重写了startElement
和characters
方法以获取"title"和"author"的值。
写入XML文件
要将数据写入XML文件,我们可以使用Java提供的DOM或者第三方库如JDOM、XOM等。以下是使用DOM写入XML文件的示例代码。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class WriteXMLUsingDOM {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("library");
document.appendChild(root);
Element book = document.createElement("book");
root.appendChild(book);
Element title = document.createElement("title");
title.appendChild(document.createTextNode("Java Programming"));
book.appendChild(title);
Element author = document.createElement("author");
author.appendChild(document.createTextNode("John Doe"));
book.appendChild(author);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File("example.xml