1. 解析的概念:

操作xml文档
    1. 解析(读取):将文档中的数据读取到内存中
    2. 写入:将内存中的数据保存到xml文档中。持久化的存储

2. DOM4J简介

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
        dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
        对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。

3. DOM4J使用

导入jar包:
    在java项目中创建lib目录,然后将jar包引入,右键lib目录选择 Add as Libary... -->> Module Libary

4.案例:

demo.xml

<?xml version="1.0" encoding="utf-8"?><图书列表 学校="XX大学">名著 <西游记 id="1"> <作者>吴承恩</作者>  <朝代>明朝</朝代> </西游记>  <水浒传 id="2"> <作者>施耐庵</作者>  <朝代>明朝</朝代> </水浒传>  <三国演义 id="3"> <作者>罗贯中</作者>  <朝代>明朝</朝代> </三国演义>  <红楼梦 id="4"> <作者>曹雪芹</作者>  <朝代>清朝</朝代> </红楼梦>
</图书列表>

XmlDemo.java

package com.qf.xml;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.List;public class XmlDemo {@Testpublic  void testFile(){File file = new File("G:\\IdeaProjects\\JavaEE\\DOM4J\\src\\com\\qf\\xml/demo.xml");System.out.println(file.length());}@Testpublic void delete() throws Exception{//创建解析器SAXReader saxReader = new SAXReader();//获取文件对象File file = new File("G:\\IdeaProjects\\JavaEE\\DOM4J\\src\\com\\qf\\xml/demo.xml");//获取document对象Document doc = saxReader.read(file);//先获取根节点(根元素)Element root = doc.getRootElement();//获取需要删除的节点(获取子元素)Element ele = root.element("平凡的世界");//调用删除的方法ele.detach();//设置写入的排版格式OutputFormat outputFormat = OutputFormat.createPrettyPrint();outputFormat.setEncoding("utf-8");//设置字符集//创建写入的对象FileOutputStream fileOutputStream = new FileOutputStream(file);//写入到xml中XMLWriter xmlWriter = new XMLWriter(fileOutputStream, outputFormat);//调用写入的方法xmlWriter.write(doc);//关闭xmlWriter.close();}@Testpublic void update() throws Exception{//创建解析器SAXReader saxReader = new SAXReader();//获取文件对象File file = new File("G:\\IdeaProjects\\JavaEE\\DOM4J\\src\\com\\qf\\xml/demo.xml");//获取document对象Document doc = saxReader.read(file);//先获取根节点(根元素)Element root = doc.getRootElement();//获取需要修改的节点(获取子元素)Element ele = root.element("活着");//修改元素名ele.setName("平凡的世界");//获取id属性Attribute attribute = ele.attribute("id");//修改id属性值attribute.setValue("7");//修改作者ele.element("作者").setText("路遥");//设置写入的排版格式OutputFormat outputFormat = OutputFormat.createPrettyPrint();outputFormat.setEncoding("utf-8");//设置字符集//创建写入的对象FileOutputStream fileOutputStream = new FileOutputStream(file);//写入到xml中XMLWriter xmlWriter = new XMLWriter(fileOutputStream, outputFormat);//调用写入的方法xmlWriter.write(doc);//关闭xmlWriter.close();}@Testpublic void Add() throws Exception{//创建解析器SAXReader saxReader = new SAXReader();//获取文件对象File file = new File("G:\\IdeaProjects\\JavaEE\\DOM4J\\src\\com\\qf\\xml/demo.xml");//获取document对象Document doc = saxReader.read(file);//先获取根节点(根元素)Element root = doc.getRootElement();//添加子节点Element element = root.addElement("活着");//添加element.addAttribute("id","5");//添加element的子节点Element element1 = element.addElement("作者");element1.addText("余华");Element element2 = element.addElement("朝代");element2.addText("现代");//设置写入的排版格式OutputFormat outputFormat = OutputFormat.createPrettyPrint();outputFormat.setEncoding("utf-8");//设置字符集//创建写入的对象FileOutputStream fileOutputStream = new FileOutputStream(file);//写入到xml中XMLWriter xmlWriter = new XMLWriter(fileOutputStream, outputFormat);//调用写入的方法xmlWriter.write(doc);//关闭xmlWriter.close();}@Testpublic void findAll() throws Exception{//创建解析器SAXReader saxReader = new SAXReader();//获取文件对象File file = new File("G:\\IdeaProjects\\JavaEE\\DOM4J\\src\\com\\qf\\xml/demo.xml");//获取document对象Document doc = saxReader.read(file);//先获取根节点(根元素)Element root = doc.getRootElement();//获取根元素信息System.out.println("根元素名称:"+root.getName());System.out.println("根元素的属性:"+root.attribute(0).getName());//System.out.println("根元素的属性:"+root.attribute("学校").getName());System.out.println("根元素的属性的属性值:"+root.attributeValue("学校"));System.out.println("根元素的文本内容:"+root.getTextTrim());System.out.println("----------------------------------------");//获取所有子节点(子元素)List<Element> elements = root.elements();//遍历for(Element e : elements){System.out.println(e.getName());}System.out.println("----------------------------------------");//通过元素名获取单个元素Element xyj = root.element("西游记");System.out.println("西游记的id属性值:"+xyj.attributeValue("id"));System.out.println("西游记的作者:"+xyj.element("作者").getTextTrim());System.out.println("----------------------------------------");getAll(root);}//查询xml中所有数据public void getAll(Element element){List<Element> elements = element.elements();for(int i = 0;i<elements.size();i++){Element ele = elements.get(i);System.out.println(ele.getName());System.out.println(ele.getTextTrim());getAll(ele);//递归}}}

XpathDemo.java

package com.qf.xml;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;public class XpathDemo {public static void main(String[] args) throws Exception {//创建解析器SAXReader saxReader = new SAXReader();//获取文件对象File file = new File("G:\\IdeaProjects\\JavaEE\\DOM4J\\src\\com\\qf\\xml/demo.xml");//获取document对象Document doc = saxReader.read(file);//获取指定单个节点对象Element ele =  (Element)doc.selectSingleNode("/图书列表");System.out.println(ele.getName());//获取多个节点对象List<Element> elements =  doc.selectNodes("//作者");for(Element e : elements){System.out.println(e.getTextTrim());}}
}

XML 第三篇(解析)相关推荐

  1. xml的三种解析方式

    本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...

  2. Android中XML的三种解析器分析、实战

    XML解析器介绍 Android中提供了三种方式来解析XML: SAX(simple API for XML) DOM(文档对象模型) 以及Android内部使用的Pull解析. SAX(simple ...

  3. xml文件的三种解析方式 DOM SAM PULL

    <?xml version="1.0" encoding="UTF-8"?> <root><student id="1& ...

  4. [Qt教程] 第29篇 XML(三)Qt中的SAX

    [Qt教程] 第29篇 XML(三)Qt中的SAX 楼主  发表于 2013-5-21 22:27:59 | 查看: 615| 回复: 5 Qt中的SAX 版权声明 该文章原创于Qter开源社区(ww ...

  5. Android解析XML的三种方式

    在Android中提供了三种解析XML的方式:DOM(Document Objrect Model),SAX(Simple API XML),以及Android推荐的Pull解析方式. 如图: 本篇博 ...

  6. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...

  7. vue+axios+qs序列化 “三步解析”【含demo实例】- 代码篇

    文章目录 qs序列化:是什么?为什么?怎么办?`实例截图参考` 一.`(简单了解)` · `三步解析 ` 序列化是一种用来处理对象流的机制: 对象.文件.数据,有许多不同的格式,很难统一传输和保存 序 ...

  8. Java解析Xml的三种方式总结

    转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内 ...

  9. IT创业失败案例解析 - 第三篇

    原文标题:RiotVine Post-Mortem(查看原文推荐) 原文作者:Kabir 双语对照 RiotVine网站关闭了(注:RiotVine是一个与朋友分享实时事件消息的社交网站),我真诚地感 ...

  10. 用python解析xml的几种方法,Python_XML的三种解析方法

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

最新文章

  1. 为什么UART串口通信要16倍过采样数据
  2. 苹果营收和股价双双创历史新高!库克:iPhone 11系列卖得很好
  3. Cordova实战培训
  4. VF01 BAPI :BAPI_BILLINGDOC_CREATEMULTIPLE
  5. ios 检测是否联网_秋招|阿里 iOS 五轮面经分享,已收到阿里的意向书
  6. 计算机网络之物理层:1、接口特性、同步异步、串行并行、双工
  7. 使用javascript实现浏览器全屏
  8. Java EE 架构设计——基于okhttp3 的网络框架设计
  9. linux内核分析--异步io(一)
  10. 业务逻辑需要放在service层_CTO问:Service层真的需要接口吗?
  11. java基础总结02-语言基础
  12. 刀具半径补偿 c语言,数控铣床编程时刀具半径补偿指令及运用
  13. oracle追踪语句,SQL Monitor(oracle语句追踪工具)
  14. 适合初学者的linux开发板
  15. 【Elementory OS 6】安装 tweak
  16. oracle配置控制文件快照的位置以及名称为,Oracle快照控制文件(snapshotcontrolfile)
  17. 斐讯路由器虚拟服务器怎么设置,斐讯PSG1218路由器如何设置
  18. Python xls文件和xlsx文件格式互相转换
  19. 入门级蓝牙遥控小车制作教程
  20. 制作Linux登录欢迎界面

热门文章

  1. 【目标检测】研究生第一次组会汇报PPT(初稿)(专业术语讲解+论文分析)(100页)(上篇)
  2. 【数组】arr,arr,arr+1,arr+1以及内存单元的占用
  3. Footprint:区块链投资遍地开花,NFT成新风向
  4. Kotlin干掉了findViewById,但用不好也会有性能问题
  5. 虚拟机命令里面的光标不动了怎么办_11 个 Linux 终端命令,没用过的快去试试吧!!...
  6. 漫山遍野的多边形元素,正在入侵每一份设计稿
  7. ESD门禁闸机系统的功能说明
  8. 使用图表分析2020北京积分落户的数据
  9. 内网渗透工具——Natapp的注册和使用
  10. 纳恩博获1亿美金C轮融资 发力机器人和智能短交通领域