XML解析、读取

preview
共6个文件
classpath:1个
prefs:1个
project:1个
需积分: 0 2 下载量 100 浏览量 更新于2014-06-18 收藏 5KB ZIP 举报
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。在Java中,处理XML文件是一项常见的任务,无论是读取还是写入XML文档,都有多种方法可供选择。本节将详细介绍如何在Java中进行XML的解析和读取。 1. **DOM解析器**: DOM(Document Object Model)是W3C推荐的一种解析XML的标准方法。它将整个XML文件加载到内存中,形成一棵节点树,然后可以通过API访问任意节点。使用DOM解析器,可以方便地遍历和修改整个XML文档。例如,`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类是实现DOM解析的关键。 2. **SAX解析器**: SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不将整个XML文档加载到内存,而是逐行读取,遇到元素、属性等事件时触发回调函数。这种方式适合处理大型XML文件,因为它节省了内存。在Java中,`org.xml.sax.helpers.DefaultHandler`是处理SAX事件的主要接口。 3. **JAXB(Java Architecture for XML Binding)**: JAXB是Java提供的一种XML和Java对象之间的绑定框架,它可以自动将XML文档转换为Java对象,反之亦然。对于需要将XML数据映射到Java对象的场景,JAXB非常方便。使用`javax.xml.bind.JAXBContext`和`javax.xml.bind.Unmarshaller`可以实现XML到Java对象的转换。 4. **StAX(Streaming API for XML)**: StAX是一种流式解析器,介于DOM和SAX之间。它允许程序通过迭代器逐个处理XML事件,同时提供了向前查找的能力,比SAX更灵活,但又不像DOM那样消耗大量内存。Java中的`javax.xml.stream.XMLInputFactory`和`javax.xml.stream.XMLEventReader`用于创建和操作StAX流。 5. **Java内置的XMLReader**: 在Java中,`javax.xml.parsers.SAXParserFactory`可以用来创建一个`SAXParser`实例,这个`SAXParser`可以读取XML文件并使用用户定义的事件处理器。`XMLReader`是SAX解析器的核心,它负责读取XML输入源并调用事件处理器。 下面是一个简单的Java DOM解析XML文件的例子: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import java.io.File; public class XMLReader { public static void main(String argv[]) { try { File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("staff"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println("\nCurrent Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Staff id : " + eElement.getAttribute("id")); System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent()); System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent()); System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent()); System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 这个例子展示了如何使用DOM解析器读取XML文件,找到所有名为"staff"的元素,并打印出其子元素的信息。 了解并掌握这些XML解析技术对Java开发者来说至关重要,因为它们在处理XML数据时提供了极大的灵活性和效率。根据具体需求,开发者可以选择最合适的解析策略,确保程序性能和资源利用的最佳平衡。