马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

Java中解析XML的四种方法:DOM、SAX、StAX和JDOM

2023-11-30 16:32:19java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

首先,Java中解析XML的方法主要有四种:DOM、SAX、StAX和JDOM。以下是一个简单的表格对比这几种方法:

方法 描述
DOM 文档对象模型,将整个XML文档加载到内存中,形成一个树形结构,可以方便地进行增删改查操作
SAX 事件驱动的解析器,逐行读取XML文件,当遇到开始标签、结束标签等元素时触发事件
StAX 连续流式处理,与SAX类似,但提供了迭代器接口,用户可以自由控制解析过程
JDOM 基于Java的API,使用起来更加简单,不需要了解太多XML知识

接下来,我将给出一个简单的DOM解析XML的例子,并解释代码。

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 org.w3c.dom.Element;
import java.io.File;

public class XMLParser {

    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(" Current 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();
        }
    }

}
  1. 导入必要的包。
  2. 创建一个名为XMLParser的公共类。
  3. main方法中,创建一个`File`对象,指向要解析的XML文件。
  4. 使用`DocumentBuilderFactory创建一个新的DocumentBuilder`实例。
  5. 使用DocumentBuilder解析XML文件并返回一个Document对象。
  6. 调用normalize()方法规范化文档结构。
  7. 打印根元素的名称。
  8. 获取所有名为'staff'的元素节点列表。
  9. 遍历每个元素节点,打印其名称、属性和子元素的内容。

关于大小写的问题,XML是大小写敏感的,所以在编写XML文档和解析XML时需要注意大小写的一致性。例如,在上面的代码中,如果XML文件中的元素名或属性名大小写不正确,那么解析将会失败。