XML与JSON(二) ---面试题Java中有几种XML解析方式 ?

9 篇文章 0 订阅
2 篇文章 0 订阅

Java中有几种XML解析方式 ? 分别是什么 ? 有什么样的优缺点 ?

答:四种解析方式。

一、SAX解析

        解析方式:事件驱动机制;

        SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件。

        可以编写程序在这些事件发生时,进行相应的处理。

        优点:

                分析能够立即开始,而不是等待所有的数据被处理;

                逐行加载,节省内存。有助于解析大于系统内存的文档;

                有时不必解析整个文档,它可以在某个条件得到满足时停止解析。

        缺点:

                单向解析,无法定位文档层次,无法同时访问同一文档的部分数据(因为逐行解析,当解析第n行时,第n-1行已经被释放了,无法再进行操作);

                无法得知事件发生时元素的层次,只能自己维护节点的父/子关系;

                只读解析方式,无法修改XML文档的内容。

二、DOM解析

        是用平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和内存中建立文档树模型,程序员可以通过操作文档树来完成数据的获取、修改、删除等。

        优点:

                文档在内存中加载,允许对数据和结构做出更改;

                访问是双向的,可以在任何时候在树中双向解析数据。

        缺点:

                文档全部加载在内存中,消耗资源大。

三、JDOM解析

        目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。

        JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。

        优点:

                使用具体类而不是接口,简化了DOM的API;

                大量使用了Java集合类,方便了Java开发人员。

        缺点:

                没有较好的灵活性;

                性能不是name优异。

四、DOM4J解析

        它是JDOM的一种智能分支,合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。

        许多开源项目中大量采用DOM4J,例如:Hibernate

        步骤:

        1、引入jar文件:dom4j.jar

        2、创建一个指向XML文件的输入流

FileInputStream fis = new FileInputStream("xml文件的地址");

        3、创建一个XML读取工具对象

SAXReader sr = new SAXReader();

        4、使用读取工具对象,读取XML文档的输入流,并得到文档对象

Document doc = sr.read(fis);

        5、通过文档对象,获取XML文档中的根元素对象

Element root = doc.getRootElement();

 文档对象Document:指的是加载到内存的整个XML文档;

        常用方法:

        1)通过文档对象,获取XML文档中的根元素对象

Element root = doc.getRootElement();

        2)添加根节点

Element root = doc.addElement("根节点名称");

元素对象 Element:指的是XML文档中的单个节点

常用方法:

        1)获取节点名称:

String getName();

        2)获取节点内容

String getText();

        3)设置节点内容

String setText();

        4)根据子节点的名称,获取匹配名称的第一个子节点对象

Element element(String 子节点名称);

        5)获取所有的子节点对象

List<Element> elements();

        6)获取节点的属性值

String attributeValue(String 属性名称);

        7)获取子节点的内容

String elementText(String 子节点名称);

        8)添加子节点

Element addElement(String 子节点名称);

        9)添加属性

void addAttribute(String 属性名,String 属性值);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值