Java XML 转 List

介绍

在 Java 中,我们经常需要将 XML 数据转换为 List 数据结构进行处理。XML 是一种常用的数据交换格式,而 List 是一种常用的数据容器。本文将介绍如何使用 Java 实现 XML 转 List 的功能,并提供示例代码。

XML 数据格式

在开始之前,我们先来了解一下 XML 的数据格式。XML 使用标记来描述数据的结构和内容。标记由开始标签、结束标签和标签之间的内容组成。

以下是一个简单的 XML 示例:

<books>
  <book>
    <title>Java 编程</title>
    <author>John Smith</author>
  </book>
  <book>
    <title>Python 入门</title>
    <author>Lisa Johnson</author>
  </book>
</books>

在这个示例中,<books> 是开始标签,</books> 是结束标签。<book> 是另一个开始标签,</book> 是对应的结束标签。<title><author> 是嵌套在 <book> 标签中的标签。

使用 JAXP 解析 XML

Java 提供了 JAXP (Java API for XML Processing) 来解析和处理 XML 数据。我们可以使用 JAXP 中的 DocumentBuilder 类来解析 XML 数据,并将其转换为一个 Document 对象。

以下是使用 JAXP 解析 XML 的示例代码:

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

public class XMLParser {
  public Document parse(String xmlString) throws Exception {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    return builder.parse(new InputSource(new StringReader(xmlString)));
  }
}

上述代码中,我们首先创建了一个 DocumentBuilderFactory 对象,然后使用该对象创建一个 DocumentBuilder 对象。接下来,我们将 XML 字符串转换为一个 InputSource 对象,并使用 parse 方法将其解析为一个 Document 对象。

将 XML 转为 List

一旦我们将 XML 数据解析为一个 Document 对象,就可以开始将其转换为 List 数据结构了。

假设我们要将上述的 XML 数据转换为一个 List,其中每个元素代表一本书。我们可以使用 getElementsByTagName 方法来获取指定标签名的所有元素,并遍历这些元素来提取书籍的信息。

以下是将 XML 转换为 List 的示例代码:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class XMLToListConverter {
  public List<Book> convert(Document document) {
    List<Book> books = new ArrayList<>();
    Element rootElement = document.getDocumentElement();
    NodeList bookNodes = rootElement.getElementsByTagName("book");
    
    for (int i = 0; i < bookNodes.getLength(); i++) {
      Element bookElement = (Element) bookNodes.item(i);
      String title = bookElement.getElementsByTagName("title").item(0).getTextContent();
      String author = bookElement.getElementsByTagName("author").item(0).getTextContent();
      books.add(new Book(title, author));
    }
    
    return books;
  }
}

上述代码中,我们首先创建了一个空的 List 对象 books。然后,我们获取根元素 books,再通过 getElementsByTagName 方法获取所有的 book 元素。接下来,我们遍历这些 book 元素,并提取每个元素中的 titleauthor 信息,最后将其添加到 List 中。

示例代码

下面是一个完整的示例,演示了如何使用 JAXP 将 XML 数据转换为 List。

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 XMLToListConverter {
  public List<Book> convert(String xmlString) throws Exception {
    List<Book> books = new ArrayList<>();
    
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new InputSource(new StringReader(xmlString)));
    
    Element rootElement = document.getDocumentElement();
    NodeList bookNodes = rootElement.getElementsByTagName("book");
    
    for (int i = 0; i < bookNodes.getLength(); i++) {
      Element bookElement = (Element) bookNodes.item(i);
      String title = bookElement.getElementsByTagName("title").item(0).getTextContent();
      String author = bookElement