使用Java的DOM解析XML文件方法详解

需积分: 10 0 下载量 34 浏览量 更新于2024-09-19 收藏 3KB TXT 举报
"本文将介绍如何使用W3C DOM(Document Object Model)解析XML文档,以提取和操作XML数据。示例中展示了如何处理一个包含书籍信息的XML文件,并通过Java代码实现解析过程。" 在XML处理中,W3C DOM是一种流行的方法,它将XML文档作为一个树形结构进行处理,每个元素、属性和文本都表示为树中的节点。DOM允许开发者通过API来访问和修改XML文档的任何部分,无论它们在文档中的位置如何。在本示例中,我们将探讨如何解析一个简单的XML文件,该文件存储了两本书的信息,包括书名和价格。 首先,让我们分析提供的XML文档: ```xml <?xml version="1.0" encoding="UTF-8"?> <books> <book id="12"> <name>thinkinginjava</name> <price>85.5</price> </book> <book id="15"> <name>Spring in Action</name> <price>39.0</price> </book> </books> ``` 这个XML文档包含一个`books`根元素,下面是两个`book`子元素,每个`book`元素都包含了`name`和`price`信息。 为了解析这个XML,我们需要使用Java的`javax.xml.parsers`包,该包提供了DOM解析器。以下是一个简单的Java类`DomParseService`,用于解析上述XML文件: ```java import java.io.InputStream; import java.util.ArrayList; import java.util.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.Node; import org.w3c.dom.NodeList; import com.xtlh.cn.entity.Book; // 假设Book是定义书籍信息的实体类 public class DomParseService { public List<Book> getBooks(InputStream in) { List<Book> books = new ArrayList<>(); try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(in); // 获取XML文档的根元素 Element rootElement = doc.getDocumentElement(); NodeList bookNodes = rootElement.getElementsByTagName("book"); for (int i = 0; i < bookNodes.getLength(); i++) { Node bookNode = bookNodes.item(i); if (bookNode.getNodeType() == Node.ELEMENT_NODE) { Element bookElement = (Element) bookNode; String id = bookElement.getAttribute("id"); String name = bookElement.getElementsByTagName("name").item(0).getTextContent(); String price = bookElement.getElementsByTagName("price").item(0).getTextContent(); Book book = new Book(id, name, Double.parseDouble(price)); books.add(book); } } } catch (Exception e) { e.printStackTrace(); } return books; } } ``` 在这个类中,我们首先创建了一个`DocumentBuilder`实例,然后使用它来解析输入流中的XML文档。`Document`对象代表整个XML文档。接着,我们获取`books`元素的所有`book`子元素。对于每个`book`元素,我们提取`id`、`name`和`price`信息,并将它们封装到`Book`实体对象中,最后添加到`books`列表中。 通过这个例子,我们了解了如何使用W3C DOM解析XML文件,以及如何遍历和提取XML文档中的数据。这种方法适用于需要对XML文档进行深度遍历和复杂操作的情况。然而,对于大型XML文件,考虑到性能问题,可能需要考虑使用SAX或StAX等更轻量级的解析方法。
2012-08-05 上传