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

yizhihongxing

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日

相关文章

  • 苹果iPhone快捷指令怎么用?IOS13快捷指令使用技巧图文介绍

    苹果iPhone快捷指令是一款强大的自动化工具,可以帮助用户快速执行一些常用的任务,如发送短信、播放音乐、设置闹钟等。下面是苹果iPhone快捷指令的使用方法详解: 步骤1:打开快捷指令应用程序 在iPhone设备中,找到并打开“快捷指令”应用程序。 如果您是第一次使用快捷指令应用程序,需要先创建一个新的快捷指令。 步骤2:创建新的快捷指令 在快捷指令应用程…

    html 2023年5月17日
    00
  • 三星手机开屏密码忘记了怎么办 如何解决屏幕锁密码忘记的问题

    如果您忘记了三星手机的开屏密码,可以尝试以下方法来解决: 方法1:使用Google账户解锁 在输入密码的界面,连续输入5次错误密码。 在弹出的界面中,选择“忘记密码”。 输入您的Google账户和密码,以解锁手机。 如果您没有绑定Google账户,或者无法使用该方法解锁手机,请尝试下一种方法。 方法2:使用Find My Mobile解锁 访问Samsung…

    html 2023年5月17日
    00
  • win7系统笔记本搜索无线wifi信号出现乱码无法连接的故障原因及解决方法

    问题描述 在win7系统笔记本中搜索无线wifi信号时,出现乱码无法连接的故障。 可能的原因 无线网卡驱动异常:没有安装或者驱动过旧、损坏等原因导致。 系统设置问题:可能是无线网络设置没有正确配置,或者系统中的某些设置出现错误。 病毒或恶意软件:有些病毒或恶意软件会干扰网络连接,导致无法连接wifi信号。 信号干扰:周围可能存在其他wifi信号或电子设备的干…

    html 2023年5月31日
    00
  • ARB币发行价和发行量各是多少?

    以下是“ARB币发行价和发行量各是多少?”的完整攻略: ARB币发行价和发行量各是多少? ARB币是由Arbitrum发行的一种数字货币,它是基于以太坊的二层扩展协议,旨在提高以太坊的可扩展性和交易速度。以下是关于ARB币发行价和发行量的详细攻略。 ARB币发行价 ARB币的发行价是在ICO期间确定的,ICO期间ARB币的发行价为1美元。在ICO期间,ARB…

    html 2023年5月18日
    00
  • Your Uninstaller(软件卸载工具)怎么使用?Your Uninstaller图文使用教程(附视频教程)

    Your Uninstaller(软件卸载工具)怎么使用?Your Uninstaller图文使用教程(附视频教程) Your Uninstaller是一款功能强大的软件卸载工具,以下是Your Uninstaller的详细使用攻略: 步骤1:下载和安装Your Uninstaller 打开浏览器。 访问Your Uninstaller官方网站。 下载You…

    html 2023年5月17日
    00
  • Android字符串和十六进制相互转化出现的中文乱码问题

    在Android中进行字符串和十六进制之间的转换时,经常会遇到中文乱码的问题。这是由于在不同编码方式之间转换时,如果编码不匹配,就会出现乱码。下面是一些解决这个问题的方法: 1. 字符串和十六进制相互转换 下面的代码演示了如何将一个字符串转换为十六进制表示形式: String str = "hello world"; byte[] byt…

    html 2023年5月31日
    00
  • 在抖音直播游戏赚钱吗?怎么赚钱

    以下是“在抖音直播游戏赚钱吗?怎么赚钱”的完整攻略: 在抖音直播游戏赚钱吗?怎么赚钱 抖音直播是一款非常受欢迎的直播平台,许多用户在平台上直播游戏,并通过直播赚钱。下面是在抖音直播游戏赚钱的攻略。 直播游戏 直播游戏是在抖音直播赚钱的主要途径之一。许多用户在抖音直播平台上直播游戏,吸引粉丝观看,并通过打赏、礼物等方式获得收益。直播游戏需要注意以下几点: 选择…

    html 2023年5月18日
    00
  • 电脑打字乱码怎么办? txt文字变乱码的解决办法

    电脑打字乱码怎么办?txt文字变乱码的解决办法 问题描述 在使用电脑打字的过程中,有时会出现乱码的情况,即在打出的文字中出现了一些奇怪的符号或变为乱码,此时无法正常阅读和编辑。这种情况在打开txt文本时也可能出现。 解决方案 出现这种情况时,我们可以采取以下几种方案: 方案一:修改编码方式 打开乱码的文本文件(如:txt文件),在左上角找到“文件”菜单,点击…

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