当前位置:实例文章 » JAVA Web实例» [文章]JAVA中的XML

JAVA中的XML

发布人:shili8 发布时间:2025-02-04 08:43 阅读次数:0

**Java 中的 XML**

XML(Extensible Markup Language)是一种用于数据交换和存储的标记语言。它允许用户定义自己的标签和结构,来描述和表示数据。Java 提供了多种 API 和工具来处理 XML 数据。

### **DOM 模式**

DOM(Document Object Model)是 Java 中最常用的 XML 处理模式。它将 XML 文档作为一个树状结构来表示,每个节点都有自己的属性和子节点。

**示例代码:**

javaimport javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;

public class DOMExample {
 public static void main(String[] args) throws Exception {
 // 创建 DocumentBuilderFactory 实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 // 创建 DocumentBuilder 实例 DocumentBuilder builder = factory.newDocumentBuilder();
 // 解析 XML 文件 Document document = builder.parse("example.xml");
 // 获取根节点 NodeList nodeList = document.getElementsByTagName("book");
 // 遍历节点 for (int i =0; i < nodeList.getLength(); i++) {
 Node node = nodeList.item(i);
 // 获取属性值 String title = node.getAttributes().getNamedItem("title").getNodeValue();
 String author = node.getAttributes().getNamedItem("author").getNodeValue();
 System.out.println("Title: " + title);
 System.out.println("Author: " + author);
 }
 }
}

**注释:**

* `DocumentBuilderFactory` 和 `DocumentBuilder` 是用于创建和解析 XML 文档的工厂类。
* `getElementsByTagName()` 方法用于获取指定名称的节点列表。
* `getAttributes()` 方法用于获取节点的属性集合。
* `getNodeValue()` 方法用于获取属性值。

### **SAX 模式**

SAX(Simple API for XML)是 Java 中另一种用于处理 XML 的模式。它提供了一个事件驱动的接口,允许用户在解析过程中处理 XML 数据。

**示例代码:**
javaimport org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXExample extends DefaultHandler {
 public void startElement(String uri, String localName, String qName,
 Attributes attributes) throws SAXException {
 System.out.println("Start element: " + qName);
 // 获取属性值 String title = attributes.getValue("title");
 String author = attributes.getValue("author");
 System.out.println("Title: " + title);
 System.out.println("Author: " + author);
 }
 public void endElement(String uri, String localName, String qName)
 throws SAXException {
 System.out.println("End element: " + qName);
 }
 public static void main(String[] args) throws Exception {
 // 创建 XMLReader 实例 org.xml.sax.XMLReader reader = org.xml.sax.helpers.XMLReaderFactory .createXMLReader();
 // 设置处理器 reader.setContentHandler(new SAXExample());
 // 解析 XML 文件 reader.parse("example.xml");
 }
}

**注释:**

* `DefaultHandler` 是用于实现事件驱动接口的基类。
* `startElement()` 和 `endElement()` 方法分别用于处理开始和结束元素事件。
* `Attributes` 类用于获取属性值。

### **StAX 模式**

StAX(Streaming API for XML)是 Java 中用于处理 XML 的模式。它提供了一个流式接口,允许用户在解析过程中处理 XML 数据。

**示例代码:**
javaimport javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;

public class StAXExample {
 public static void main(String[] args) throws Exception {
 // 创建 XMLInputFactory 实例 XMLInputFactory factory = XMLInputFactory.newInstance();
 // 创建 XMLEventReader 实例 XMLEventReader reader = factory.createXMLEventReader("example.xml");
 // 遍历事件 while (reader.hasNext()) {
 XMLEvent event = reader.nextEvent();
 if (event.isStartElement()) {
 StartElement startElement = event.asStartElement();
 // 获取属性值 String title = startElement.getAttributeValue(null, "title");
 String author = startElement.getAttributeValue(null, "author");
 System.out.println("Title: " + title);
 System.out.println("Author: " + author);
 } else if (event.isEndElement()) {
 EndElement endElement = event.asEndElement();
 System.out.println("End element: " + endElement.getName());
 }
 }
 }
}

**注释:**

* `XMLInputFactory` 是用于创建 XMLEventReader 实例的工厂类。
* `XMLEventReader` 是用于解析 XML 文件的接口。
* `XMLEvent` 是用于表示事件的类。
* `StartElement` 和 `EndElement` 是用于表示开始和结束元素事件的类。

### **JAXB 模式**

JAXB(Java Architecture for XML Binding)是 Java 中用于处理 XML 的模式。它提供了一个绑定接口,允许用户将 Java 类转换为 XML 文件。

**示例代码:**
javaimport javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class JAXBExample {
 public static void main(String[] args) throws Exception {
 // 创建 JAXBContext 实例 JAXBContext context = JAXBContext.newInstance(Book.class);
 // 创建 Marshaller 实例 Marshaller marshaller = context.createMarshaller();
 // 将 Java 对象转换为 XML 文件 Book book = new Book("Java", "Oracle");
 marshaller.marshal(book, "example.xml");
 }
}

class Book {
 private String title;
 private String author;

 public Book(String title, String author) {
 this.title = title;
 this.author = author;
 }

 @XmlElement public String getTitle() {
 return title;
 }

 @XmlElement public String getAuthor() {
 return author;
 }
}

**注释:**

* `JAXBContext` 是用于创建 Marshaller 实例的工厂类。
* `Marshaller` 是用于将 Java 对象转换为 XML 文件的接口。
* `Book` 类是用于表示书籍信息的 Java 类。
* `@XmlElement` 注解是用于标记属性值的注解。

### **XMLEncoder**

XMLEncoder 是 Java 中用于序列化 Java 对象到 XML 文件的类。它提供了一个简单的接口,允许用户将 Java 对象转换为 XML 文件。

**示例代码:**
javaimport java.io.OutputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;

public class XMLEncoderExample {
 public static void main(String[] args) throws Exception {
 // 创建 DocumentBuilderFactory 实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 // 创建 TransformerFactory 实例 TransformerFactory transformerFactory = TransformerFactory.newInstance();
 // 将 Java 对象转换为 XML 文件 Book book = new Book("Java", "Oracle");
 XMLEncoder encoder = new XMLEncoder(factory.newDocumentBuilder().newDocument());
 encoder.writeObject(book);
 OutputStream outputStream = System.out;
 encoder.flush(outputStream);
 }
}

class Book {
 private String title;
 private String author;

 public Book(String title, String author) {
 this.title = title;
 this.author = author;
 }

 public String getTitle() {
 return title;
 }

 public String getAuthor() {
 return author;
 }
}

**注释:**

* `XMLEncoder` 是用于序列化 Java 对象到 XML 文件的类。
* `DocumentBuilderFactory` 和 `TransformerFactory` 是用于创建 DocumentBuilder 实例和 Transformer 实例的工厂类。
* `Book` 类是用于表示书籍信息的 Java 类。

### **XMLDecoder**

XMLDecoder 是 Java 中用于反序列化 XML 文件到 Java 对象的类。它提供了一个简单的接口,允许用户将 XML 文件转换为 Java 对象。

**示例代码:**
javaimport java.io.InputStream;
import javax.xml.parsers.DocumentBuilderFactory;

public class XMLDecoderExample {
 public static void main(String[] args) throws Exception {
 // 创建 DocumentBuilderFactory 实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 // 将 XML 文件转换为 Java 对象 XMLEncoder encoder = new XMLEncoder(factory.newDocumentBuilder().newDocument());
 InputStream inputStream = System.in;
 Book book = (Book) encoder.readObject(inputStream);
 }
}

class Book {
 private String title;
 private String author;

 public Book(String title, String author) {
 this.title = title;
 this.author = author;
 }

 public String getTitle() {
 return title;
 }

 public String getAuthor() {
 return author;
 }
}

**注释:**

* `XMLDecoder` 是

其他信息

其他资源

Top