Java XML转Object

简介

在Java开发中,我们经常会遇到将XML数据转换为Java对象的需求。XML是一种用于存储和传输数据的标记语言,而Java对象是面向对象编程的基本单位。通过将XML转换为Java对象,我们可以更方便地操作和处理数据。

本文将介绍如何使用Java中的XML解析库,将XML数据转换为Java对象。我们将使用Java中的DOM解析和JAXB两种常用的方式来实现这一目标。

DOM解析

DOM(Document Object Model)是一种基于树结构的XML解析方法。它将整个XML文档加载到内存中,并以树结构的形式表示。使用DOM解析XML的基本流程如下:

  1. 创建一个DocumentBuilderFactory对象。
  2. 使用DocumentBuilderFactory对象创建一个DocumentBuilder对象。
  3. 使用DocumentBuilder对象的parse方法将XML文件解析成一个Document对象。
  4. 使用Document对象的方法获取XML元素的值。

下面是一个使用DOM解析XML并将其转换为Java对象的示例代码:

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

public class XMLParser {
    public static void main(String[] args) {
        try {
            // 创建DocumentBuilderFactory对象
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // 创建DocumentBuilder对象
            DocumentBuilder builder = factory.newDocumentBuilder();
            // 解析XML文件,得到一个Document对象
            Document document = builder.parse("data.xml");
            
            // 获取根元素
            Element root = document.getDocumentElement();
            
            // 获取子元素列表
            NodeList nodeList = root.getElementsByTagName("book");
            
            // 遍历子元素,创建Java对象
            for (int i = 0; i < nodeList.getLength(); i++) {
                Element element = (Element) nodeList.item(i);
                String title = element.getElementsByTagName("title").item(0).getTextContent();
                String author = element.getElementsByTagName("author").item(0).getTextContent();
                int year = Integer.parseInt(element.getElementsByTagName("year").item(0).getTextContent());
                double price = Double.parseDouble(element.getElementsByTagName("price").item(0).getTextContent());
                
                Book book = new Book(title, author, year, price);
                System.out.println(book);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们首先创建了一个DocumentBuilderFactory对象,然后使用它创建了一个DocumentBuilder对象。接下来,我们调用DocumentBuilder对象的parse方法,将XML文件解析成一个Document对象。通过Document对象,我们可以获取XML元素的值,进而创建Java对象。

JAXB

JAXB(Java Architecture for XML Binding)是Java中用于将XML数据绑定到Java对象的技术。它通过注解的方式描述XML结构,然后使用JAXB提供的API来实现XML和Java对象的互相转换。使用JAXB将XML转换为Java对象的基本流程如下:

  1. 创建一个包含XML结构描述的Java类。
  2. 使用JAXB提供的API将XML文件转换为Java对象。

下面是一个使用JAXB将XML转换为Java对象的示例代码:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;

public class XMLParser {
    public static void main(String[] args) {
        try {
            // 创建JAXBContext对象
            JAXBContext context = JAXBContext.newInstance(Bookstore.class);
            // 创建Unmarshaller对象
            Unmarshaller unmarshaller = context.createUnmarshaller();
            // 将XML文件转换为Java对象
            Bookstore bookstore = (Bookstore) unmarshaller.unmarshal(new File("data.xml"));
            
            // 输出Java对象
            for (Book book : bookstore.getBooks()) {
                System.out.println(book);
            }
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们首先创建了一个JAXBContext对象,该对象通过传入包含XML结构描述的Java类来初始化。然后,我们创建了一个Unmarshaller对象,并使用其unmarshal方法将XML文件转换为Java对象。最后,我们遍历Java对象列表,并输出每个对象的信息。

对比

DOM解析和JAXB都是常用的将XML转换为Java对象的方法,它们各有优劣。

DOM解析