Java 编写 xml
时间: 2024-01-26 21:03:24 浏览: 24
Java 可以使用 DOM(文档对象模型)或 SAX(简单 API for XML)等 API 来编写 XML。
使用 DOM 编写 XML:
1. 创建 Document 对象,作为 XML 文档的根节点。
2. 创建 Element 对象,作为 XML 文档的元素节点。
3. 将 Element 对象添加到 Document 对象中。
4. 创建属性节点并将其添加到 Element 对象中。
5. 创建文本节点并将其添加到 Element 对象中。
6. 将 Element 对象添加到父节点中。
7. 将 Document 对象写入到 XML 文件中。
示例代码:
```java
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class WriteXML {
public static void main(String[] args) throws Exception {
// 创建 DocumentBuilder 对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// 创建 Document 对象
Document doc = builder.newDocument();
// 创建根节点
Element root = doc.createElement("Books");
doc.appendChild(root);
// 创建子节点
Element book = doc.createElement("Book");
book.setAttribute("id", "001");
root.appendChild(book);
Element title = doc.createElement("Title");
title.appendChild(doc.createTextNode("Java Programming"));
book.appendChild(title);
Element author = doc.createElement("Author");
author.appendChild(doc.createTextNode("John Smith"));
book.appendChild(author);
Element price = doc.createElement("Price");
price.appendChild(doc.createTextNode("29.99"));
book.appendChild(price);
// 将 Document 对象写入到 XML 文件中
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult("books.xml");
transformer.transform(source, result);
}
}
```
使用 SAX 编写 XML:
1. 创建 SAXParserFactory 对象。
2. 创建 SAXParser 对象。
3. 自定义 Handler 类,并实现相应的回调方法。
4. 将 Handler 对象注册到 SAXParser 中。
5. 解析 XML 文件。
示例代码:
```java
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class WriteXML {
public static void main(String[] args) throws Exception {
// 创建 SAXParser 对象
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
// 创建 Handler 对象
MyHandler handler = new MyHandler();
// 将 Handler 对象注册到 SAXParser 中
parser.parse("books.xml", handler);
}
}
class MyHandler extends DefaultHandler {
private String currentElement;
private String title;
private String author;
private String price;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
currentElement = qName;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String value = new String(ch, start, length).trim();
if (value.length() == 0) {
return;
}
switch (currentElement) {
case "Title":
title = value;
break;
case "Author":
author = value;
break;
case "Price":
price = value;
break;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("Book")) {
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Price: " + price);
}
}
}
```