XML解析、读取
需积分: 0 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数据时提供了极大的灵活性和效率。根据具体需求,开发者可以选择最合适的解析策略,确保程序性能和资源利用的最佳平衡。