java基础 xml解析_Java基础之XML解析

131069727_1_20180424071751972

Java大联盟

致力于最高效的Java学习

今天给大家分享关于XML解析的实际应用,XML简单来说就是一种文件格式,这种格式的文件在Java程序开发中使用地非常广泛,一般用来做配置文件。

比如需要在web.xml中配置web的相关设置,同时任何一个主流框架都需要通过配置XML文件的方式来完成业务逻辑到框架体系的对接。当然,如果使用SpringBoot这种快速开发框架,则可以大大减少对于XML文件的配置。总体来讲,XML在开发中使用的频率很高,而且主要是用来做配置文件的。

定义

官方定义是Extensible Markup Language,可扩展标记语言,简称XML。

特点

1.XML与操作系统、编程语言的开发平台无关。

2.实现不同系统之间的数据交换。

3.XML文档内容由一系列标签元素组成。

标签语法:

元素内容元素名>

注意事项

1.属性值用双引号包裹。

2.一个元素可以有多个属性。

3.属性值中不能直接包含、'、'、不建议直接包含&。、>

4.XML标签对大小写敏感。

5.XML必须有正确的嵌套结构。

6.同级标签以缩进对齐。

7.元素名称可以包含字母、数字或其他的字符。

8.元素名称不能以数字或者标点符号开始。

9.元素名称中不能含空格。

如果XML标签中一定要出现、'、'、&,我们可以使用转义字符来处理。、>

符号转义字符

>>

'"

''

&&

XML案例

books>

book id='001'>

author>张三author>

title>Java高级编程title>

description>Java高级编程理论加实践讲解description>

book>

book id='002'>

author>李四author>

title>MySQL数据库title>

description>关系型数据库概述description>

book>

books>

在实际开发中,XML文件并不复杂,我们的重点是读取XML,而非定义XML的结构,只要能快速获取有效信息即可。

那么我们如何通过Java程序读取XML信息,并且对XML文件作出修改呢?

有多种方式,可以采用原生的dom解析方式,但是这种方式步骤比较繁琐,通常情况下,我们会使用第三方的开源API,dom4j来完成。

dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过了官方的dom解析技术。

下载地址:https://dom4j.github.io/

下载完成,将dom4j的jar文件导入工程即可,非常简单。

接下来,我们使用dom4j对一个保存手机信息的XML文件进行增删改查的操作。

XML:

phone>

brand name='华为'>

type name='Mate10'/>

type name='P20'/>

type name='畅享6'/>

brand>

brand name='苹果'>

type name='iPhoneX'/>

type name='iPhone8'/>

brand>

brand name='小米'>

type name='Note4'/>

type name='MIX2'/>

brand>

phone>

查询操作:

//创建reader对象

SAXReader reader = new SAXReader();

//解析xml文件,转换为document对象

Document document = reader.read('resource/phone.xml');

//获取document的根节点,即phone标签对应的节点

Element root = document.getRootElement();

//通过迭代的方式,层层解析document

Iterator iter = root.elementIterator();

while(iter.hasNext()){

//获取brand元素对象,即brand标签对应的节点

Element brand = (Element)iter.next();

//获取brand节点的name属性值,打印

System.out.println(brand.attributeValue('name'));

//继续迭代,获取brand的子节点type节点

Iterator iter2 = brand.elementIterator();

while(iter2.hasNext()){

//获取type节点的name属性值,打印

Element type = (Element)iter2.next();

System.out.println(type.attributeValue('name'));

}

}

查询结果:

131069727_5_20180424071752347

添加操作:

SAXReader reader = new SAXReader();

Document document = reader.read('resource/phone.xml');

Element root = document.getRootElement();

//给根节点添加brand节点

Element brand = root.addElement('brand');

//给brand节点添加name属性

brand.addAttribute('name', '三星');

//给brand节点添加type节点

Element type = brand.addElement('type');

//给type节点添加name属性

type.addAttribute('name', 'S9');

//将document对象保存到xml文件中

//设置编码

OutputFormat of = OutputFormat.createCompactFormat();

of.setEncoding('utf-8');

//获取输出流对象

FileOutputStream fs = new FileOutputStream('resource/phone.xml');

//获取XMLWriter对象

XMLWriter xw = new XMLWriter(fs, of);

//调用write方法写入到xml文件

xw.write(document);

//关闭资源

xw.close();

添加完成,XML:

131069727_6_20180424071752394

更新操作:

SAXReader reader = new SAXReader();

Document document = reader.read('resource/phone.xml');

Element root = document.getRootElement();

Iterator iter = root.elementIterator();

int i = 1;

while(iter.hasNext()){

Element brand = (Element)iter.next();

//循环遍历,给每一个brand节点添加id属性

brand.addAttribute('id', i+'');

i++;

}

//将document对象保存到xml文件中

//设置编码

OutputFormat of = OutputFormat.createCompactFormat();

of.setEncoding('utf-8');

//获取输出流对象

FileOutputStream fs = new FileOutputStream('resource/phone.xml');

//获取XMLWriter对象

XMLWriter xw = new XMLWriter(fs, of);

//调用write方法写入到xml文件

xw.write(document);

//关闭资源

xw.close();

更新完成,XML:

131069727_7_20180424071752488

删除操作:

SAXReader reader = new SAXReader();

Document document = reader.read('resource/phoneInfo.xml');

Element root = document.getRootElement();

Iterator iter = root.elementIterator();

while(iter.hasNext()){

Element brand = (Element)iter.next();

//删除brand为三星的节点

if(brand.attributeValue('name').equals('三星')){

brand.getParent().remove(brand);

}

}

//将document对象保存到xml文件中

//设置编码

OutputFormat of = OutputFormat.createCompactFormat();

of.setEncoding('utf-8');

//获取输出流对象

FileOutputStream fs = new FileOutputStream('resource/phone.xml');

//获取XMLWriter对象

XMLWriter xw = new XMLWriter(fs, of);

//调用write方法写入到xml文件

xw.write(document);

//关闭资源

xw.close();

删除完成,XML:

131069727_8_20180424071752613

以上就是通过dom4j对XML文件进行增删改查的操作,但是实际开发中,我们使用更多的只有查询操作。新增、修改和删除一般都是手动去完成,查询操作结合反射机制去动态处理需求,是XML的常规用法。

131069727_9_20180424071752707

131069727_10_20180424071752753

专业 热爱 专注致力于最高效的Java学习Java大联盟

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值