解析方式

XML 解析方式有很多种,但是常用的有两种,如下:

DOM

Document Object Model:把整个 XML 读到内存中,形成树状结构。整个文档为 Document 对象,属性为 Attribute 对象,元素节点为 Element 对象,文本也可以称之为 Text 对象,以上所有对象都可以称之为 Node 节点。如果 XML特别大,那么会造成内存溢出。可以利用它对 XML 文档进行增删操作。

SAX

Simple API for XML:基于事件驱动,读取一行,解析一行。不会造成内存溢出。只能查询,不可以进行增删操作。

依赖jar包&文档下载

Dom4j使用

依赖jar包

dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar

使用

<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student>
        <name id="1">杨幂</name>
        <age>32</age>
    </student>
    <student>
        <name>郭德纲</name>
        <age>18</age>
    </student>
</students>

student.xml

package com.zze.test;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class XMLParseTest {
    /**
     * Element 方式解析
     */
    @Test
    public void test1() {
        try {
            // 创建 SAX 读取对象
            SAXReader saxReader = new SAXReader();
            // 指定读取源
            Document document = saxReader.read(this.getClass().getClassLoader().getResourceAsStream("com/zze/xml/student.xml"));
            // 获取根元素
            Element rootElement = document.getRootElement();
            List<Element> studentElements = rootElement.elements("student");
            for (Element studentElement : studentElements) {
                String name = studentElement.element("name").getText();
                Integer age = Integer.parseInt(studentElement.element("age").getText());
                System.out.println(String.format("name:%s", name));
                System.out.println(String.format("age:%s", age));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * XPath 方式解析
     * 要使用 XPath ,需要添加 jar 支持:jaxen-1.1-beta-6.jar
     */
    @Test
    public void test2() {
        Document document = null;
        try {
            SAXReader saxReader = new SAXReader();
            document = saxReader.read(this.getClass().getClassLoader().getResourceAsStream("com/zze/xml/student.xml"));
            Element rootElement = document.getRootElement();
            // 获取文档中所有 name 节点
            List<Element> nameElements = rootElement.selectNodes("//name");
            for (Element nameElement : nameElements) {
                System.out.println(nameElement.attribute("id") != null ? nameElement.attribute("id").getText() : "");
                System.out.println(nameElement.getText());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

java之xml解析-dom4j的更多相关文章

  1. java的XML解析(DOM4J技术)

    DOM4J技术解析XML文件 一,XML简介 xml (可扩展标记语言)  全称: Extended Markup Language 可扩展的含义:允许程序员按照自己的想法去扩展新的标签 注意:但是扩 ...

  2. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  3. Java的XML解析

    XML:(eXtensible Markup Language) 可扩展标记语言 是一种数据格式,用于存储和传输数据 声明一个xml文件 <?xml version="1.0" ...

  4. 【Java】XML解析之DOM4J

    DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...

  5. XML解析-Dom4j的DOM解析方式更新XML

    Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...

  6. 【Java】XML解析之SAX

    SAX介绍 SAX(Simple API for XML)是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具 ...

  7. 【Java】XML解析之DOM

    DOM介绍 DOM(Document Object Model)解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内 ...

  8. java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class

    package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util.Scanner; impo ...

  9. java:xml解析

    DOM.SAX.JDOM.DOM4J四种解析:https://www.cnblogs.com/longqingyang/p/5577937.html Java解析XML文件例子:https://blo ...

随机推荐

  1. Win10 calc.exe 无法打开计算器的解决方法

    先将所有程序关闭,以管理员身份运行 Windows PowerShell,之后输入以下命令 Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage - ...

  2. vue移动端flexible.js结合Muse-ui使用和vux的小坑

    因为公司有个项目有webapp的需求,在前期准备的期间考虑过使用ionic,毕竟该项目web端的框架使用的是Angular,项目组的人也都比较熟悉,但是我们毕竟只是做个移动的网页,不想用ionic那么 ...

  3. 第四百一十三节,python面向对象,组合、类创建的本质、依赖注入

    组合 组合举例组合就是多个类,或者若干类联合起来完成一个任务下面举例两个类联合起来完成一个任务为了降低代码的耦合度,我们一般不会在一个类里实例化另外一个类,都是将一个类在外面实例化后传参到另外一个来这 ...

  4. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  5. 阿里巴巴Java开发手册及Java代码规约扫描eclipse和IDEA插件

    <阿里巴巴Java开发手册>: https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B ...

  6. JAVA并发理论与实践

    JDK5.0中更灵活.更具可伸缩性的锁定机制 流行的原子 非阻塞算法简介

  7. 使用100%面向过程的思维方式来写java程序

    1.java是强制写class关键字的语言,不能有独立的函数游离在类外出现在文件中,这和python c++ 都不同,后面的都可以单独在类外写函数,所以java被称为是纯面向对象的语言,py和c++都 ...

  8. HttpServletResponse实现文件下载

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

  9. cf 1132 F

    区间dp.. 每次删一串相邻的一样的,问多少次删光. 感觉想的几乎是一样的怎么比赛时就过不了呢...一定是因为我挂机睡觉了 考虑l和r相等,l和l+1相等,r和r-1相等这三种情况就行了..然后就是裸 ...

  10. hdu 1241(DFS/BFS)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...