📜  讨论Java XML(1)

📅  最后修改于: 2023-12-03 15:41:42.462000             🧑  作者: Mango

讨论Java XML

XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言。Java 提供了许多内置的 API 用于处理和操作 XML。

下面将讨论 Java 中处理 XML 的一些常用 API。

DOM(Document Object Model)

DOM 是 W3C 标准的一部分,定义了一种用于访问和操作 XML 文档的 API。通过 DOM,我们可以将整个 XML 文档读入内存,并使用 DOM API 来访问和修改 XML 文档的内容。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("example.xml"));

上述代码将在内存中创建 XML 树型结构,每个 XML 节点都是一个文档对象模型(DOM)节点对象。此后,我们可以使用 DOM API 来访问 XML 节点。

SAX(Simple API for XML)

SAX 是 Java 的一组 XML API,用于解析 XML 文档。与 DOM 不同,SAX 不会将整个 XML 文档载入内存,而是在读取时逐个节点处理。由于 SAX 是基于事件驱动的,因此它在处理大型 XML 文件时更加高效。

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File("example.xml"), new MySAXHandler());

上述代码将使用 SAX API 解析 XML 文档,并在解析时触发相关事件。我们还需要实现 MySAXHandler 类来处理这些事件。

JAXP(Java API for XML Processing)

JAXP 是一个开放性的 API,用于访问和操作 XML 文档。它提供了一种标准的方法来读取和编写 XML 文档,不依赖于任何特定的 XML 处理器。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("example.xml"));

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source source = new DOMSource(document);
Result result = new StreamResult(new File("output.xml"));
transformer.transform(source, result);

上述代码使用 JAXP API 读取了 XML 文档,并将其转换为一个 DOM 对象模型。接下来,我们将使用 Transformer 类将 DOM 对象模型序列化到一个输出流中。

JAXB(Java Architecture for XML Binding)

JAXB 是 Java 的一组 API,用于将 XML 文档与 Java 对象相互转换。JAXB 技术使用标准的 Java 注释来定义 Java 对象和 XML 元素之间的映射关系,从而自动实现序列化和反序列化过程。

JAXBContext context = JAXBContext.newInstance(Customer.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

Customer customer = new Customer();
customer.setId(100);
customer.setName("John Doe");
customer.setAge(35);
marshaller.marshal(customer, new File("customer.xml"));

上述代码使用 JAXB API 将 Customer 类转换为 XML 文档,并将其写入文件。

总结

Java 在处理 XML 的能力非常强大,提供了多种方式来读取、处理和生成 XML 文档。开发者可以针对自己的需求选择适合的 API 来处理 XML,从简单的 SAX,到 DOM 和 JAXP,再到更加方便的 JAXB,都可以轻松应对各种需求。