java xml 解析 < >_Java解析XML

《java架构宝典》文集说明本文集记载的所有内容均是java的学习笔记,主要重点记录概念,可能不会为每个概念列举完整的代码例子,更多代码例子请移步《java架构宝典》文集

若有错漏之处,欢迎各位指正

XML简介 XML,可扩展标记语言(eXtensible Markup Language),主要用于网络数据传输,数据存储,及配置文件等。

这里简单介绍一下XML的基础语法:XML文档声明 <?xml version="1.0" encoding="UTF-8"?>

XML文档由一对对标记组成

属性可以在开始标记中被描述,属性以 键="值" 的方式存储,多个属性之间由空格分割

XML文档中必须有且只有一个根标记

标记可以嵌套,但不允许交叉

以下是一个例子e06f12c20da54e660e99e7fef2cb0417.png

XML的解析方式

SAX解析

SAX, Simple API for XML事件驱动的解析机制

SAX解析器会逐行阅读,当读取到一个标记的开始、属性、内容、结束时触发事件

需要编写事件触发的相应处理程序

优点无需等待数据全部加载完毕,立即开始分析

逐行加载,节省内存

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

缺点单向解析,无法对之前的数据再进行操作

逐行解析无法得知复杂的元素的层次,只能维护父子关系的节点

只读解析,无法修改内容

DOM解析 DOM,文档对象模型(Document Object Model),欢迎关注GZH(Java架构宝典)。DOM将XML文档解析成树状结构,程序员可以通过操作此文档树来获取、修改、删除数据。

优点文档被加载至内存,允许对数据和结构进行更改

支持双向解析数据

缺点文档全部被加载至内存中,消耗资源大

Java中的DOM解析

对比SAX解析和DOM解析,后者的缺点可以忽略不计,因此主要使用DOM解析的方式处理XML文档

JDOM

如上文所说,DOM解析本身是面向所有平台的接口,DOM提供给Java的接口也只是达到了能够实现的最低通用标准,并没有特地考虑到Java的特性并作出相应的优化设计,因此Java程序员直接使用DOM的接口则会感觉到不便。JDOM则是为了解决这一问题,由Brett McLaughlin和Jason Hunter开发出来的开源项目,该项目致力于提供完善方便的用Java解析XML的解决方案。

优点实现了许多工具类,比起直接使用DOM的API,简便了XML的解析过程

加入了大量java集合,方便java程序员进行开发

缺点不是面向接口设计,没有较好的灵活性

优化并不是很好,性能没有那么优异

DOM4J

DOM4J也是为Java设计的用于解析XML的开源(Application Programming Interface,应用程序接口)

和JDOM相比,DOM4J的性能更为优异,功能更加强大,使用更加便捷,因此也更为常用

代码实现步骤下载并引入dom4j.jar

获取要解析的XML文档的输入流

创建XML读取工具对象 SAXReader sr = new SAXReader();

通过XML读取工具对象读取输入流,获取文档对象(加载到内存的整个XML文档) Document doc = sr.read(inputStream);

通过文档对象获得根元素对象再进行后续操作 Element root = doc.getRootElement();

元素对象 Element 常用操作获取节点名称 String getName();

获取节点内容 String getText();

设置节点内容 void setText(String text);

根据子节点的名称,获取匹配到的第一个子节点对象 Element element(String name)

获取所有的子节点对象 List elements();

获取节点的属性值 String attributeValue(String attributeName);

获取子节点的内容 String elementText(String childName);

添加子节点 Element addElement(String s)

添加属性 Element addAttribute(String name, String value);

示例0b1a3af00e1fbfaecca9be9fe7db2e39.png

运行结果1aaa498500c4a7abdec81d44f7f2eacb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值