一、XML概述

  1. XML可扩展标记语言,类似HTML
  2. XML的设计宗旨是传输数据而非显示数据
  3. XML被设计具有自我描述性
  4. XML没有被预定义,需要自己定义标签
  5. XML不是HTML的替代,它们两个是为不同的目的设计的·
  6. XML被设计为存储和传输数据,宗旨在于传输数据
  7. HTML被设计用来显示数据,宗旨在于显示信息
  8. XML与操作系统、编程语言的开发平台无关,实现不同系统之间的数据交换
  9. 作用;(1)数据交互(2)配置应用程序和网站(3)Ajax基石

二、XML解析的四种方式

1、DOM解析

DOM 解析 Document Object Model 文件对象模型

DOM 接口提供了一种 通过对象模型来访问XML文件信息的方式

优点:形成了树结构 ,有助于更好的理解 掌握 且代码容易编写解析过程中 树结构保存 在内存中,方便修改。

缺点:由于文件一次性的读取,对内存的消耗比较大。如果XML文件比较大,容易影响解析的性能而会造成内存溢出

2、SAX解析

Simple APIS for XML 提供了一种访问模式 是一种顺序模式,是一种快速读写XML数据方式。

当SAX分析器对XML文档进行分析时,会触发一些列事件,并激活相应的事件函数对XML文档进行访问,SAX接口也被称为事件驱动接口。

优点:采用事件驱动模式,对内存消耗比较小,适用于只处理XML文件中的数据时

缺点:编码比较麻烦,很难同时访问XML文件中多处不同的数据。

3、JDOM解析

是一个开源项目,它基于树形结构 使用纯JAVA 实现对文档的解析 生成 序列化

4、DOM4J解析

是一种智能分支,合并了许多超出基本XML文档表示的功能,使用接口和周芳基本类方法

优点:性能优异 , 灵活性好,功能强大,极端易用,是一个开放源码的文件

三、XML的语法

  1. XML文档必须有根节点
  2. 所有XML节点都必须有一个关闭标签
  3. XML标签对大小写敏感,必须正确嵌套
  4. XML属性值必须加引号
  5. 在XML中,空格会被保留
  6. XML中的注释 <!-- 内容 -->
  7. XML5个预定义的实体引用

符号

<

>

&

'

"

含义

<

>

&

四、获取Document对象

1、读取XML文件,获得document对象

SAXReader reader = new SAXReader();
Document document = reader.read(new File(文件路径));

2、主动创建document对象

Document document = DocumentHelper.createDocument();

五、节点操作的方法

1、获取根节点

Element rootElement = document.getRootElement();

2、获取节点的子节点

Element accountName = element1.element("子节点名称");

3、获取节点的内容

element1.getText();

4、获取节点下的所有子节点

List<Element> program = element1.elements();

5、获取节点名称

element1.getName();

6、在节点下添加子节点

Element element = element1.addElement("子节点名称");

7、设置节点内容

element1.addText("内容");

8、删除节点

//通过调用element()获取子节点//通过父节点.remove(子节点);删除节点Element name = element1.element("name");if (name.getText().equals("有报天天读(28/09/09) ")) {element.remove(element1);}

六、节点对象的属性方法操作

1、获取节点的属性

Attribute attribute = element1.attribute("属性名");

2、获取属性的内容

String text = attribute.getText();

3、删除属性

element1.remove(attribute);

4、设置属性的内容

attribute.setText("内容");

七、将文档写入XML文件

若文档中含有中文,设置编码格式

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");

文档写入

XMLWriter writer = new XMLWriter(new FileOutputStream(file),format);
writer.write(document);
writer.close();

八、示例

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;public class Test3 {public static void main(String[] args) {Test3 test3 = new Test3();try {File file = new File("D:\\java\\FullChannels.xml");if (file.exists()){SAXReader reader = new SAXReader();Document document = reader.read(file);Element rootElement = document.getRootElement();List<Element> list = rootElement.elements();for (Element element:list){List<Element> channel = element.elements();for (Element element1:channel) {if (element1.getText().equals("TypeA")){System.out.println("******北京电视台******");test3.typeA();}else{System.out.println("******凤凰卫视******");test3.typeB();}}}}} catch (DocumentException e) {e.printStackTrace();}}public void typeB(){File file = new File("D:\\java\\凤凰卫视.xml");if (file.exists()){SAXReader reader = new SAXReader();try {Document document = reader.read(file);Element rootElement = document.getRootElement();List<Element> list1 = rootElement.elements();for (Element element:list1) {System.out.println(element.getName());List<Element> programList = element.elements();for (Element element1:programList) {List<Element> program = element1.elements();for (Element element2:program) {element2.getText();element2.getName();switch (element2.getName()){case "playTime":System.out.println(element2.getName()+"播出时间"+element2.getText());break;case "name":System.out.println(element2.getName()+"节目名称"+element2.getText());break;case "path":System.out.println(element2.getName()+"节目视频的本地路径"+element2.getText());break;}}}}} catch (DocumentException e) {e.printStackTrace();}}}public void typeA(){File file = new File("D:\\java\\北京电视台.xml");if (file.exists()){SAXReader reader = new SAXReader();Document document = null;try {document = reader.read(file);Element rootElement = document.getRootElement();List<Element> list = rootElement.elements();for (Element element:list) {if (element.getName().equals("channelName")){System.out.println(element.getName()+"电视台名称"+element.getText());}else{List<Element> tvProgramTable = element.elements();for (Element element1:tvProgramTable) {System.out.println(element1.getName());List<Element> tvProgram = element1.elements();for (Element element2:tvProgram) {switch (element2.getName()){case "playTime":System.out.println(element2.getName()+"节目播出时间"+element2.getText());break;case "meridien":System.out.println(element2.getName()+"时段"+element2.getText());case "programName":System.out.println(element2.getName()+"节目名称"+element2.getText());break;case "path":System.out.println(element2.getName()+"视频路径"+element2.getText());}}}}}} catch (DocumentException e) {e.printStackTrace();}}}
}
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.*;
import java.util.List;public class Test2 {public static void main(String[] args) {File file = new File("D:\\java\\凤凰卫视.xml");if (file.exists()) {SAXReader reader = new SAXReader();Document document = null;try {document = reader.read(file);Element rootElement = document.getRootElement();Element ProgramList = rootElement.addElement("ProgramList");Element Program = ProgramList.addElement("Program");Program.addElement("playTime").setText("2021-7-28 17:00");Program.addElement("name").setText("有报天天读");Program.addElement("path").setText("***");List<Element> list = rootElement.elements();for (Element element : list) {List<Element> programList = element.elements();for (Element element1 : programList) {Element name = element1.element("name");Element path = element1.element("path");if (name.getText().equals("有报天天读(28/09/09) ")) {element.remove(element1);}if (name.getText().equals("音乐中国风(442)  ")){path.setText("C:\\音乐\\音乐中国风");}}}XMLWriter writer = new XMLWriter(new FileOutputStream(file));writer.write(document);writer.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}}}
}

DOM4J解析XML文档相关推荐

  1. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  2. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  3. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  4. Javaweb使用dom4j解析xml文档的一般姿势

    使用dom4j解析xml文档之前必须引入jar public class TestDom4j {@Testpublic void testReadWebXML() {try {// 1.获取解析器SA ...

  5. 分别使用dom和dom4j解析XML文档

    1.dom和dom4j的特点 dom是基于XML的树结构来完成解析的.dom解析XML文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用dom接口来对XML文档进行增删查改等操作.do ...

  6. maven中用dom4j解析xml文档

    1.需求分析 关于dom4j的详细使用方法请参考:https://blog.csdn.net/qq_41860497/article/details/84339091 在xml中存储了过滤器的的初始化 ...

  7. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  8. 使用DOM4J解析XML文档,输出所有学员信息和添加学生信息

    使用DOM4J要导包 xml信息 <?xml version="1.0" encoding="UTF-8"?><students> &l ...

  9. 使用DOM4J解析XML文档

    先下载dom4j jar包,引入到项目中后开始使用.下载连接在文章末尾. 示例:解析如下phoneInfo.xml phoneInfo.xml <?xml version="1.0&q ...

最新文章

  1. 前端基础之设计一个个人工作室介绍界面
  2. css3圆角360度转动画,target,框架集,css3过渡动画,css3圆角-阴影-透明度,运动曲线,图片文字遮罩,变形...
  3. socket中使用多线程创建并发服务器
  4. 天津理工大学 计算机网络综合实验,天津理工大学计算机网络 实验二
  5. ffmpeg源码学习之time_base
  6. 读书笔记之inside JVM(4)
  7. 十-二进制数的最少数目
  8. cdq分治 陌上花开(内无题解)
  9. 关于DllRegisterServer的调用失败的问题解决办法 错误代码0x80040201
  10. axios封装简单有效
  11. html记忆游戏,html5 最强大脑最强记忆游戏
  12. 文件及文件夹删除失败的解决方法
  13. java list下标_Java list删除指定多个下标数据
  14. 基于韦东山视频 regulator 学习笔记
  15. 阿拉伯数字转换英文,适用于英文合同和国际贸易单证
  16. apache+tomcat 集群学习 点滴1
  17. android热更新机制
  18. 《再别康桥》(徐志摩)
  19. C#爬虫,HttpClient请求,HtmlAgilityPack,HtmlDocument使用
  20. 【问】关于火车到站的问题?

热门文章

  1. 解决了新版微信个人收款二维码在H5网页里不能长按识别支付
  2. 【Mysql】SQL性能分析
  3. C# 事件函数参数(object sender, EventArgs e)
  4. 学会这三招引流方法,让你的淘宝店铺流量暴增
  5. 【计算机网络】什么是因特网
  6. 探营长虹软服 共议数字化转型与创新
  7. redis 8.Redis持久化之RDB (如何触发RDB快照;rdb备份恢复)
  8. 中病毒spoolsv.exe
  9. 快速编写HTML代码常用的方法
  10. tf.constant