java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解

Java操作XML方式的四种比较与详解

XML是可扩展标记语言,被广泛应用于各种应用程序中,Java也提供了多种方式来操作XML文档。其中最常见的有DOM、SAX、JDOM、DOM4J。本文将详细解释这四种方式的使用方式和特点。

DOM(Document Object Model)

DOM是一种将整个XML文档作为一棵树状结构的方式来处理XML文档。在DOM模型中,整个XML文档被解析成一颗树状结构,每个XML元素都被转换成一个Java对象,整棵树形结构构成了一个对象模型。通过访问这个对象模型,可以对XML文档进行增加、删除、修改、查询操作。

DOM方式的优点是可以随意访问XML文档中的任何节点,操作灵活性高。缺点是一次性将整个文档加载到内存中,适用于小型文档,大型文档的解析效率较低。

以下是DOM方式的一个示例:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(file);

doc.getDocumentElement().normalize();

Element rootElement = doc.getDocumentElement();

NodeList nList = doc.getElementsByTagName("student");

for (int i = 0; i < nList.getLength(); i++) {
    Node nNode = nList.item(i);
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement = (Element) nNode;
        System.out.println("Student 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("Marks : " 
             + eElement.getElementsByTagName("marks")
                             .item(0)
                             .getTextContent());
    }
}

SAX(Simple API for XML)

相较于DOM方式,SAX处理XML文档的方式是在解析文档的时候顺序遍历文档,遇到节点触发相应的事件,利用事件处理程序对节点进行操作和处理。由于SAX解析XML文档不像DOM方式要将整个文档加载进内存,因此适用于大型文档的解析。但缺点是无法访问XML文档的任意节点,只能按照严格的顺序遍历文档。

以下是SAX方式的一个示例:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
    boolean bfname = false;
    boolean blname = false;
    boolean bnname = false;
    boolean bsalary = false;

    public void startElement(String uri, String localName,String qName, 
                    Attributes attributes) throws SAXException {

        if (qName.equalsIgnoreCase("FIRSTNAME")) {
            bfname = true;
        }

        if (qName.equalsIgnoreCase("LASTNAME")) {
            blname = true;
        }

        if (qName.equalsIgnoreCase("NICKNAME")) {
            bnname = true;
        }

        if (qName.equalsIgnoreCase("SALARY")) {
            bsalary = true;
        }
    }

    public void endElement(String uri, String localName,String qName) 
                throws SAXException {

    }

    public void characters(char ch[], int start, int length) throws SAXException {

        if (bfname) {
            System.out.println("First Name : " 
                    + new String(ch, start, length));
            bfname = false;
        }

        if (blname) {
            System.out.println("Last Name : " 
                    + new String(ch, start, length));
            blname = false;
        }

        if (bnname) {
            System.out.println("Nick Name : " 
                    + new String(ch, start, length));
            bnname = false;
        }

        if (bsalary) {
            System.out.println("Salary : " 
                    + new String(ch, start, length));
            bsalary = false;
        }
    }

 };
 saxParser.parse(file, handler);

JDOM

JDOM是一个Java库,由于其易用性成为Java解析XML的首选库之一。JDOM在DOM和SAX的基础上进行了改进,提供了更加方便和高效的处理XML文档的方式。JDOM将XML文档作为树结构来处理,但支持按照节点名称、节点类别和属性等查询节点,同时还支持XPath表达式查询。JDOM还可以通过将树结构缓存到内存中,提高解析效率。

以下是JDOM方式的一个示例:

SAXBuilder builder = new SAXBuilder();
File xmlFile = new File("file.xml");
Document document = (Document) builder.build(xmlFile);
Element rootNode = document.getRootElement();
List list = rootNode.getChildren("staff");

for (int i = 0; i < list.size(); i++) {
    Element node = (Element) list.get(i);
    System.out.println("First Name : " + node.getChildText("firstname"));
    System.out.println("Last Name : " + node.getChildText("lastname"));
    System.out.println("Email : " + node.getChildText("email"));
    System.out.println("Salary : " + node.getChildText("salary"));
}

DOM4J

DOM4J是一个Java库,提供了一种处理XML文档的简单和易用的方式。与JDOM相似,DOM4J将XML文档视为一个树状结构,同时也支持XPath表达式查询节点,但性能更高。DOM4J处理XML文档的方式与SAX相似,通过事件来处理XML文档。DOM4J还支持将XML文档转换成DOM模型和JDOM模型。

以下是DOM4J方式的一个示例:

SAXReader reader = new SAXReader();
Document document = reader.read(new File("file.xml"));
Element root = document.getRootElement();
List<Element> list = root.elements();

for (Element e : list) {
    System.out.println("First Name : " + e.elementText("firstname"));
    System.out.println("Last Name : "  + e.elementText("lastname"));
    System.out.println("Email : " + e.elementText("email"));
    System.out.println("Salary : " + e.elementText("salary"));
}

以上就是Java操作XML方式 DOM、SAX、JDOM、DOM4J 四种比较与详解的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • 详解XML中的标签与元素的使用

    详解XML中的标签与元素的使用 什么是XML标签与元素 XML(可扩展标记语言)是一种标记语言,用于存储和传输数据,类似于HTML,它可以用来描述和存储数据,在Web开发、数据处理等领域都得到了广泛的应用。在XML中,最基本的单位就是元素,而元素又由标签和内容两部分构成。标签是元素的名称,用于标示这个元素,而内容则是元素所描述的信息。 标签的使用 XML中的…

    html 2023年5月30日
    00
  • chm文件乱码的解决方案

    下面我就为大家介绍一下“chm文件乱码的解决方案”的攻略。 问题描述 在使用Windows操作系统时,如果打开一个CHM格式的帮助文件时,可能会遇到中文乱码的情况,这很大程度上影响了用户的使用体验。 问题原因 这个问题的产生原因和Windows的“安全设置”有关。因为CHM文件在打开的时候需要动态地加载HTML页面和脚本,因此Windows默认会禁止加载外部…

    html 2023年5月31日
    00
  • AJAX中文乱码解决新方法分享

    下面就详细讲解一下“AJAX中文乱码解决新方法分享”的完整攻略。 AJAX中文乱码解决新方法分享 问题背景 在使用AJAX进行数据请求时,经常会出现中文乱码的情况。这是因为AJAX默认使用UTF-8编码方式进行请求,而有些情况下,服务器端未设置相应的编码方式,就会导致出现乱码的问题。 解决方法 方法一:在AJAX请求头中设置编码方式 在发送AJAX请求时,我…

    html 2023年5月31日
    00
  • hlp是什么文件格式?.hlp文件怎么打开?

    hlp是什么文件格式? HLP是Windows帮助文件的文件格式,它是一种二进制文件格式,用于存储Windows应用程序的帮助文档。HLP文件通常包含应用程序的用户手册、帮助文档和其他相关信息。 .hlp文件怎么打开? 如果您需要打开.hlp文件,可以按照以下步骤操作: 使用Windows自带的帮助查看器:Windows自带了一个帮助查看器,可以用来打开.h…

    html 2023年5月17日
    00
  • 简单介绍Python2.x版本中的cmp()方法的使用

    当提到比较两个变量时,我们通常会使用比较运算符比较它们的大小。在Python 2.x版本中,还提供了一个函数cmp()用于比较两个对象的大小,并返回一个整数,表示它们的相对大小关系。 cmp()方法的用法 cmp()方法有两个参数x和y,它们分别表示要比较的两个对象。如果x小于y,则返回一个负整数;如果x等于y,则返回0;如果x大于y,则返回一个正整数。 下…

    html 2023年5月30日
    00
  • 利用ASP发送和接收XML数据的处理方法与代码

    下面我将为您详细讲解“利用ASP发送和接收XML数据的处理方法与代码”的完整攻略。 什么是ASP? ASP(Active Server Pages) 是一种由 Microsoft 发明的动态服务器技术,它允许在 HTML 页面中嵌入脚本,使 Web 服务器能够动态地生成网页。ASP 现在已经成为了一种古老的技术,它的继任者是 ASP.NET,但是在一些历史悠…

    html 2023年5月30日
    00
  • ASP.NET读取XML文件4种方法分析

    ASP.NET是一个强大的Web应用程序框架,它允许开发人员使用不同的语言和工具来创建互联网上的动态应用程序。其中,读取XML文件是ASP.NET程序中很常见的操作,它使得我们能够在程序中使用XML自定义数据。 在ASP.NET中,读取XML文件有以下四种方法: 方法1:使用XmlDocument类 XmlDocument类是由System.Xml命名空间提…

    html 2023年5月30日
    00
  • IntelliJ IDEA 2021 Tomcat 8启动乱码问题的解决步骤

    下面是详细讲解“IntelliJ IDEA 2021 Tomcat 8启动乱码问题的解决步骤”的完整攻略: 问题描述 当使用IntelliJ IDEA 2021作为开发工具,并且Tomcat 8作为服务器时,在启动Tomcat时可能会遇到乱码问题,导致服务器无法正常启动。这个问题可能会让一些开发者困惑。 问题分析 问题的原因是由于Tomcat 8默认使用的是…

    html 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部