DOM4J解析XML文档
一、XML概述
- XML可扩展标记语言,类似HTML
- XML的设计宗旨是传输数据而非显示数据
- XML被设计具有自我描述性
- XML没有被预定义,需要自己定义标签
- XML不是HTML的替代,它们两个是为不同的目的设计的·
- XML被设计为存储和传输数据,宗旨在于传输数据
- HTML被设计用来显示数据,宗旨在于显示信息
- XML与操作系统、编程语言的开发平台无关,实现不同系统之间的数据交换
- 作用;(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的语法
- XML文档必须有根节点
- 所有XML节点都必须有一个关闭标签
- XML标签对大小写敏感,必须正确嵌套
- XML属性值必须加引号
- 在XML中,空格会被保留
- XML中的注释 <!-- 内容 -->
- 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文档相关推荐
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
- Dom4j 解析Xml文档及XPath查询 学习笔记
本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...
- Dom4j 解析Xml文档及 XPath查询 学习笔记
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- Javaweb使用dom4j解析xml文档的一般姿势
使用dom4j解析xml文档之前必须引入jar public class TestDom4j {@Testpublic void testReadWebXML() {try {// 1.获取解析器SA ...
- 分别使用dom和dom4j解析XML文档
1.dom和dom4j的特点 dom是基于XML的树结构来完成解析的.dom解析XML文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用dom接口来对XML文档进行增删查改等操作.do ...
- maven中用dom4j解析xml文档
1.需求分析 关于dom4j的详细使用方法请参考:https://blog.csdn.net/qq_41860497/article/details/84339091 在xml中存储了过滤器的的初始化 ...
- DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...
- 使用DOM4J解析XML文档,输出所有学员信息和添加学生信息
使用DOM4J要导包 xml信息 <?xml version="1.0" encoding="UTF-8"?><students> &l ...
- 使用DOM4J解析XML文档
先下载dom4j jar包,引入到项目中后开始使用.下载连接在文章末尾. 示例:解析如下phoneInfo.xml phoneInfo.xml <?xml version="1.0&q ...
最新文章
- 前端基础之设计一个个人工作室介绍界面
- css3圆角360度转动画,target,框架集,css3过渡动画,css3圆角-阴影-透明度,运动曲线,图片文字遮罩,变形...
- socket中使用多线程创建并发服务器
- 天津理工大学 计算机网络综合实验,天津理工大学计算机网络 实验二
- ffmpeg源码学习之time_base
- 读书笔记之inside JVM(4)
- 十-二进制数的最少数目
- cdq分治 陌上花开(内无题解)
- 关于DllRegisterServer的调用失败的问题解决办法 错误代码0x80040201
- axios封装简单有效
- html记忆游戏,html5 最强大脑最强记忆游戏
- 文件及文件夹删除失败的解决方法
- java list下标_Java list删除指定多个下标数据
- 基于韦东山视频 regulator 学习笔记
- 阿拉伯数字转换英文,适用于英文合同和国际贸易单证
- apache+tomcat 集群学习 点滴1
- android热更新机制
- 《再别康桥》(徐志摩)
- C#爬虫,HttpClient请求,HtmlAgilityPack,HtmlDocument使用
- 【问】关于火车到站的问题?