DOM4J解析xml&Sax解析XML

Java中SAX、Pull与DOM4J解析XML文件技术详解 本文还有配套的精品资源,点击获取 简介:本文详细介绍了Java中三种XML解析技术:SAX、Pull和DOM4J。这三种方法适用于不同的应用场景,如大文件处理和频繁查询。本文将通过Eclipse 4.8和Java 1.8环境的演示,让读者了解如何使用这些方法进行XML数据解析。SAX解析器基于事件驱动,适合大文件处理;Pull解析器提供了一个简洁的API,适合Android... 阅读详情

1.xml:是一种可扩展的标记语言,它也是由标签组成,不同的是它的标签名可以自定义.

后缀名:.xml.

2.xml作用:用来传输和存储数据。用来作为配置文件;用来跨平台进行数据交换格式.用来作为持久文件存数据.

注意:xml和html都是标记语言,由标签组成.html专门作为前端页面展示,xml用来作后台数据传输和存储.

3.xml的组成(了解)

3.1:xml标签规范:

3.1.1:XML标签区分大小写.

3.1.2:XML标签一定要关闭.

单标签:<标签名 属性名="属性值"/>

双标签:<标签名 属性名1="属性值1" 属性名2="属性值2"></标签名>

3.1.3:XML文档必须有根元素(根标签)

3.1.4:XML标签要正确嵌套.

eg:<标签名1><标签名2></标签名2></标签名1>

3.1.5:XML标签名可以自定义,但是要像正常人取名就可以.

3.1.6:XML标签中换行和空格都会当作标签内容

3.2:文档声明:xml文件的版本,规定文件的字符编码等页面属性。

<? xml version="1.0" encoding="utf-8" ?>必须写在xml文件的第一句。

3.3:属性:每个标签名的括号中可以有0到多个属性。xml标签的属性值一定要用引号。在同一个标签中,属性不可以重名。

<标签名 属性1="值1" 属性2="值2" ></标签名>

3.4:注释:<!--注释内容 -->。注释不能嵌套。

3.5:实体引用:一些字符拥有特殊的意义.

<![CDATA[特殊字符]]>

3.6:处理指令:用来指挥软件如何解析XML文档。语法:<? ?>

eg:<?xml version="1.0" encoding="utf-8" ?>

3.7:xml约束:规范文件的内容。

xml约束的类型:xml Schema ,xml DTD

eg:
<?xml version="1.0" encoding="utf-8" ?>
 <!--xml根据标签是students-->
<!DOCTYPE students [                  
<!--xml根据标签students有1到多个student子标签-->
<!ELEMENT students (student+)>	
<!--student标签有sname,ssex,sage子标签,顺序规定好了-->
<!ELEMENT student (sname,ssex,sage)>   
<!--student标签有sid属性,这个属性是必须有的-->
<!ATTLIST student sid CDATA #REQUIRED>  
<!ELEMENT sname (#PCDATA)>          <!--sname标签的内容是文本类型-->    
<!ELEMENT ssex (#PCDATA)>               <!--ssex标签的内容是文本类型-->
<!ELEMENT sage (#PCDATA)>               <!--sage标签的内容是文本类型-->
]>
eg:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE students [                  
<!ELEMENT students (student+)>         
<!ELEMENT student (sname,ssex,sage)>   
<!ATTLIST student sid CDATA #REQUIRED>  
<!ELEMENT sname (#PCDATA)>              
<!ELEMENT ssex (#PCDATA)>              
<!ELEMENT sage (#PCDATA)>             
]>
<students>
    <student sid="1">
        <sname>赵天慧</sname>
        <ssex>女</ssex>
        <sage>18</sage>
    </student>
    <student sid="2">
        <sname>刚哥</sname>
        <ssex>男</ssex>
        <sage>18</sage>
    </student>
    <student sid="3">
        <sname>董超</sname>
        <ssex>男</ssex>
        <sage>17</sage>
    </student>
    <student sid="4">
        <sname>司永康</sname>
        <ssex>男</ssex>
        <sage>18</sage>
    </student>
</students>

4.DOM4J解析xml:

4.1:DOM4J解析xml:用一个流将硬盘上xml内容加载到内存中再通过节点方式解析

优点:可读性;性能优异、功能强大和极其易使用的特点.

缺点:耗内存.

Document 文档类 用于加载指定的文档

常用方法:

4.1.1:getRootElement() 获取根节点 Element 标签类,元素

4.1.2:elements() 获取所有的直接子标签

4.1.3:element("子标签名")获取指定的直接子标签

4.1.4:element("子标签名").getText()获取指定标签名称的文本内容

4.1.5:elementText("标签名") 获取指定标签名称的文本内容 element 获取指定标签名称的标签对象.

4.1.6:attribute("属性名")属性节点对象

4.1.7:attribute("属性名").getText();获得属性值

4.1.8:attributeValue("属性名");获得属性值

4.2:DOM4j使用:导包:

eg:public static void main(String[] args) throws Exception {
    //1.创建dom4j的读取对象
    SAXReader reader=new SAXReader();
    //2.用读取对象将硬盘上xml文件读取内存中,用文档对象接收
    Document stuDocument=reader.read("Day40\\src\\students.xml");

    //声明一个学生对象集合用来存解析出学生信息
    List<Student> stuList=new ArrayList();

    /*3.解析xml文件*/
    //获得xml的根节点对象-students
    Element root=stuDocument.getRootElement();
    //获得根节点下面所有子节点-student
    List<Element> childs=root.elements();
    //遍历所有子节点
    for (Element child:childs){
        //创建一个学生对象,用属性来存解析出数据
        Student stu1=new Student();
        //获得节点sid属性值,并将值存在学生对象中
        stu1.setSid(Integer.valueOf(child.attribute("sid").getText()));
        //获得当前节点的子节点属性值
        stu1.setSname(child.element("sname").getText());
        stu1.setSage(Integer.valueOf(child.elementText("sage")));
        stu1.setSsex(child.elementText("ssex"));

        //解析完一个子标签student,将解析出的student对象存在集合中
        stuList.add(stu1);
    }

    //输出解析结果
    for (Student s:stuList){
        System.out.println(s);
    }
}

5.Sax解析XML:

5.1:Sax解析XML原理:基于事件流,自动解析xml文件.

优点:省内存,自动解析方便.

缺点:可读性差,不可控制(自动从文件开始解析结尾).

5.2:Sax解析:jdk自带.

eg:/**
*sax解析的自定义处理器类
 */
public class MyHandle extends DefaultHandler {
    /**
    *声明一个集合存解析出数据
    */
    List<Student> stuList;
    /**
    *声明一个学生对象存当前解析出数据
    */
    Student stu1;
    /**
     *声明一个变量存当前解析标签名
     */
    String tagName;

    /**
    *重写父类中开始解析xml文档的方法
    *@return void
    */
    @Override
    public void startDocument () throws SAXException
    {
        //初始化学生集合
        stuList=new ArrayList();
    }

    /**
    *重写父类中解析每个开始标签的方法
    *@param uri, localName, qName, attributes
    *@return void
    */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        //存当前解析标签名,以便后面我们知道解析到哪个标签.
        tagName=qName;
        //如果当前解析标签名叫student
        if ("student".equals(qName)){
            stu1=new Student();
            //获得当前这个student标签的sid属性值,并存在学生对象中
            stu1.setSid(Integer.valueOf(attributes.getValue("sid")));
        }
    }

    /**
    *重写父类中获得每个标签内容的方法
    *@param ch, start, length
    *@return void
    */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        //当前标签内容不为空
        if (ch.length!=0){
            //声明一个变量存当前标签的内容,将数据类型文本内容转换字符串
            String content=new String(ch,start,length);
            //根据标签名判断当前值是对应的是哪个标签的文本值
            if ("sname".equals(tagName)){//姓名
                //将标签文本值存在当前对应学生对象的属性中
                stu1.setSname(content);
            }else if ("ssex".equals(tagName)){//性别
                //将标签文本值存在当前对应学生对象的属性中
               stu1.setSsex(content);
            }else if ("sage".equals(tagName)){//年龄
                //将标签文本值存在当前对应学生对象的属性中
               stu1.setSage(Integer.valueOf(content));
            }
        }
    }

    /**
    *重写父类中解析每个结束标签的方法
    *@param uri, localName, qName
    *@return void
    */
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        //如果结束标签为student,说明已经解析完了一个学生对象,将当前解析出学生对象存入集合中
        if ("student".equals(qName)){
            stuList.add(stu1);
        }
    }

    /**
    *重写父类中结束解析xml文档的方法
    *@return void
    */
    @Override
    public void endDocument() throws SAXException {
        System.out.println("当前xml解析完了");
    }
}
public static void main(String[] args) throws Exception {
    //1.创建sax解析器工厂对象
    SAXParserFactory factory=SAXParserFactory.newInstance();
    //2.用解析器工厂对象创建解析器对象
    SAXParser parser=factory.newSAXParser();
    //3.创建自定义解析器对象的处理器
    MyHandle mh=new MyHandle();
    //4用解析器对象调用解析方法解析xml
    parser.parse("Day40\\src\\students.xml",mh);

    //遍历解析结果
    for (Student s:mh.stuList){
        System.out.println(s);
    }
}

dom4j下的sax解析xml dom4j下sax解析xml文件 sax解析大文件比dom更快 更节省内存,xml测试文件在src下,可直接运行应用jar包在lib下,无需导入 立即下载

相关推荐

十一、机器学习进阶知识:径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

本文对径向基神经网络(RBFNN)的理论基础及建模步骤进行介绍,之后使用Python实现基于RBFNN的数据预测,通俗易懂,适合新手学习,附源码及实验数据集。

weixin_42051846的博客 1万+

XML学习笔记2(XML解析及XML注意事项)

XML学习笔记三、XML的解析3.1 常见的XML解析技术3.1.1 DOM解析3.1.2 SAX解析3.1.3 JDOM解析3.1.4 DOM4J解析3.2 DOM4J解析XML3.2.1 读取XML 三、XML的解析 对XML文件进行操作包括创建XML,对XML文件进行增删改查操作。 3.1 常见的XML解析技术 3.1.1 DOM解析 是官方提供的解析方式,基于XML树解析。 3.1.2 SAX解析 是民间的解析方式,基于事件的解析。 3.1.3 JDOM解析 第三方提供,开源免费的解析方式,比DOM

qq_50745337的博客 590

mongoDB 数据莫名其妙的没了

问题 之前没有接触过mongoDB,然后接手一个项目使用的是MongoDB,我就跟着网上的教程搭建一个MongoDB的服务,并运行起来。 一开始没有啥问题,成功的把服务与MongoDB都启动以来,运行也没有问题。但是过了几天,我再次打开时发现,以前的数据神奇的消失了。我还在想,是有什么定时清除的么,还是什么原因导致崩了然后数据就被清理了。 查找原因 第一次遇到我没有在意,重启了一下MongoDB,...

技术熊的博客小窝 1万+

Java进阶(五十一)XML:四种解析器(dom,sax,jdom,dom4j)原理及性能比较

Java进阶(五十一)XML:四种解析器(dom,sax,jdom,dom4j)原理及性能比较  dom是解析xml的底层接口之一(另一种是sax).而jdom和dom4j则是基于底层api的更高级封装。dom是通用的,具有跨语言、跨平台性,而jdom和dom4j则是面向java语言的。 1.DOM  DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组

IT全栈 华强工作室 4万+

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决)

本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。

solidity8miner的博客 286

高速信号设计中的关键测试项目与测试仪器详解

高速信号设计是一个多维度协同优化的系统工程。时域分析如同外科手术刀般精准定位物理缺陷,频域分析提供传输通道的频谱指纹,信号质量评估量化系统鲁棒性,接收端容限测试验证极端工况下的可靠性,协议一致性确保生态互操作性,而电源完整性则直指诸多信号问题的根源。

u014344410的博客 218

学习笔记-dom4j和sax

 SAX篇:SAX是什么:SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。通俗点说就是用来解析xml文件的接口。SAX特点:SAX是一个用于处理XML事件驱动的“推”模型,SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。它逐行扫描文档,一边扫...

Sunmeok的博客 2524

i.MX6ULL系统移植 | 使用busybox制作根文件系统(1.29.0)

一. 下载BusyBox BusyBox是一个继承了大量Linux命令核工具的软件,像常用的ls、cp、mv、ifconfig等命令。一般下载BusyBox的源码,然后配置Busybox,选择自己想要的功能,最后编译即可。 BusyBox在官方可以直接下载:https://www.busybox.net/。目前最新是1.35.0,这里我使用1.29.0版本。 axel https://www.busybox.net/downloads/busybox-1.29.0.tar.bz2 下载之后解压: tar

Mculover666的博客(嵌入式) 1146

XML--02--解析-SAX方式

https://blog.youkuaiyun.com/liuquan0071/article/details/50264379? https://blog.youkuaiyun.com/lsh364797468/article/details/51325540 https://blog.youkuaiyun.com/m0_37499059/article/details/80505567? https://blog.youkuaiyun.com/redarmy_chen/article/details/12951649 https://blog.csd

时光里的博客 1033

YOLOv12改进策略【独家融合改进】| MobileNetV4+BiFPN,轻松实现降参涨点,适用专栏内所有的骨干替换

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 980

教程: 将 SolidWorks 设计导出为 ROS 的 URDF

请按照以下步骤应用自定义徽标纹理:创建徽标材质文件:techniquepass材质名称:测试/材质颜色属性:环境、漫反射、镜面和发射都设置为白色(1 1 1 1),这意味着该材质看起来完全是白色的。纹理 在表面应用纹理图像 logo.png。将材质文件复制到 gazebo matrial:复制徽标图像:将 “徽标 ”替换为机器人上徽标所在位置的适当参考值。按照以上步骤,您就可以在 Gazebo 中为机器人添加自定义材质和纹理,包括徽标。

机器人控制与仿真应用 2459

java解析xml字符串 w3c_Dom4j解析xml格式的字符串【java】

一般我们会使用dom4j、SAX、w3c来解析xml文件,网上也大多提供此类解决方案。但在实际项目中,也有会解析xml格式的字符串报文的。比如,有如下字符串:String = "OK201605110015070000314903http://10.202.18.24:8080/osms/wbs/print/printOrder.pub?mailno=vYrygnDPNe9Csjz35xwzwQ=...

weixin_39884832的博客 326

【Python】-- 趣味代码 - 发牌游戏

Python -- 趣味代码 - 发牌游戏

银尘博客 352

java解析xml字符串 dom4j_通过dom4j解析xml字符串(示例代码)

import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class Test {@SuppressWarnings("unch...

weixin_39915820的博客 184

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

.net 获取xml里面的值_XML技术初步

第35次(XML技术)学习主题:XML技术学习目标:1 掌握XML基本语法,命名规则2 掌握什么是Schema,什么是DTD3 掌握DOM解析XMLXML概念和体系简述XML的特点?XML数据以纯文本格式存储实现不同应用程序之间的数据通信实现不同平台间的数据通信实现不同平台间的数据共享一个标准的XML文档由什么组成?序言、DTD、文档根、结尾XML基本语法简述XML的基本语法?有且只有一个根元素X...

weixin_39790686的博客 320

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

xml的解析DOM,SAX,DOM4J

Dom和sax解析区别: 1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式  sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析 器都支持它。 2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document 对象,从而再对XML文

小虫 4566

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

XML解析器:DOM、SAX、DOM4J

※ XML学习 W3CSchool.chm文件 W3CSchool.chm.zip ※ XML解析器 JAXP介绍(Java API for XMLProcessing) JAXP 是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包组成. 在 javax.xml.parsers 包中,定义了几个工厂类,程序员调用这些工厂类,可以得到对...

ZJLOVE的博客 1029

XML文档详解

XML文档 一、XML文件 二、Dom4J解析XML文件 三、Sax解析XML文件 四、使用Dom4j的XPath解析XML文件 4.1XPath语法 4.2 获取sys-config.xml文件的配置信息 4.3 获取server.xml文件的配置信息 4.4 获取bookstore.xml文件的配置信息

m0_71229255的博客 1443

使用DOM、DOM4j、SAX三种方式解析XML

一、DOM解析 DOM:Document Object Model 文档对象模型 //实例化document工厂 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); //实例化document构造器 DocumentBuilder db=dbf.newDocumentBuilder(); //

Apollo 504

Dom4j与sax 简单对比

Dom4j与sax之间的对比 dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作...

aosmlc6485的博客 326

xml的两种解析方式:sax,dom4j

两种解析方式的优缺点:     sax解析:优点:不需要读取整个文件,并且将其储存在内从中,不耗费内存资源,才用触发监听的方式,文件读到哪里触发相应方法。         缺点:不能反复调用,每次解析时都要从头解析,只能进行查询     dom4j:优点:只需解析一次,即可反复调用。能够进行增删改查。          缺点:必须先整体的解析一次,拿到Document对象,才能进行操作.耗

茅屋 1235

xml有哪些解析技术?区别是什么?

xml有哪些解析技术?区别是什么? Answer: 有DOM,SAX,STAX等 (1):DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问 (2):SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇...

myharmony的专栏 240

XML的解析方式

XML的解析方式有: (1)DOM解析方法,可以对XML文档进行修改操作; (2)SAX解析方法,解析速度快,占用内存少; (3)JDOM解析方法,查找方便; (4)DOM4J解析方法,解析XML的速度快; 1.XML简介 XML即可扩展的标记语言,可以定义语义标记(标签),是元标记语言。XML不像超文本标记语言HTML,HTML只能使用规定的标记,对于XML,用户可以定义自己需要的标记。 XML文档以层级标签的形式来组织数据,多用于配置文件、存储静态数据、交换数据。 2.XML语法 1.

qq_41316200的博客 8880

XML格式目录解析——DOM,SAX,Dom4j方式

一、概况 项目中要解析一个XML格式的目录,经过搜索了解到,解析方式主要有DOM,Pull,SAX三种方式,各自特点如下: SAX sax是一个用于处理xml事件驱动的“推”模型; 优点:解析速度快,占用内存少,它需要哪些数据再加载和解析哪些内容。 缺点:它不会记录标签的关系,而是需要应用程序自己处理,这样就会增加程序的负担。 DOM dom是一种文档对象模型; 优点:dom可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构,dom技术使得用户页面可以动态的变化,如动态显示隐藏一个元素,改变它

每天进步一点点 602

Dom4j解析XML(详解)

Dom4j解析XML(详解) DOM解析 SAX解析 使用Dom4j解析XML 结合XPath解析XML

qq_51447436的博客 3万+

【XML解析】使用Dom4j对XML进行SAX解析

【前言】          我们上篇说到了 使用Jaxp对XML进行DOM解析,本篇简介SAX和使用Dom4j对XML进行SAX解析。 【DOM解析 VS SAX解析】          上篇博客中,我们提到了XML解析的方式有两种,一种是DOM方式,另一种是SAX方式。          在使用DOM解析XML文档时,需要读取整个XML文档,在内存中构架代表整个DOM树的Do

王璐 829
上一篇: web项目专项训练——学校管理系统代码分享
下一篇: Spring 注解大全与详解
Java_LXM
博客等级 码龄7年 39粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值