xml(3)--dom4j实现crud操作
1.XML解析技术概述
(1)XML解析方式分为两种:dom和sax
dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种标准方式。
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区其实的标准,差点儿全部的 XML 解析器都支持它。
(2)XML解析器(软件/实现类)
Crimson(SUN)、Xerces(IBM->APACHE) 、Aelfred2(DOM4J开源组织)
(3)XML解析技术API/开发包(在使用时,一定要导入jar包dom4j-1.6.1.jar。然后右键“Butid Path”)
Jaxp(SUN/dom/sax)、
Jdom、
dom4j
以上三种,应该说逐渐递增的好用吧,最简单大莫如dom4j。
2.
DOM4j中。获得Document对象的方式有三种:
(1).读取XML文件,获得document对象(解析)
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
(2).解析XML形式的文本,得到document对象
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
(3).主动创建document对象(创建)
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement("members");
3.将文档写入XML文件
(1)文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml")); document.add(rootElement);
writer.write(document);
writer.flush();
writer.close();
(2)文档中含有中文,设置编码格式写入的形式.
OutputFormat format =
OutputFormat.createCompactFormat();//以紧凑的方式
OutputFormat of = OutputFormat.createPrettyPrint();//有换行的模式
OutputStream os = new FileOutputStream("src/cn/itcast/xml/dom4j/car.xml");
XMLWriter xmlWriter = new XMLWriter(os,format);
或者这样:(输出中文字符的要设置编码方式“utf-8”)
XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(filePath),"UTF-8"),OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();
4.(1)CRUD的含义:CreateReadUpdateDelete增删查改
(2)XML解析器有二类。各自是DOM和SAX。
a)DOM一次性将整个XML文件读到内存,形成一个倒状的树形结构
b)SAX多次将整个XML文件读到内存
c)Document对象代表XML文件在内存中的映像
(3)经常使用的API例如以下:
SAXReader saxReader = new SAXReader(); SAXReader是dom4j的核心类
Document document = saxReader.read("*.xml")
Document.getRootElement()
Element.getName()
Element.elements():取得该元素下的全部直接子元素
Element.elementText():从一个元素导航到还有一个元素且取出该元素的文本
Element.element("sex")
:从一个元素导航到还有一个元素
Element.attributeValue("id"):取得一个元素相应的属性
Element.addElement("sex").setText("男"):加入新元素,同一时候设置该元素文本的值
OutputFormat format = OutputFormat.createPrettyPrint():使用缩格形式写XML文件
XMLWriter xmlWriter = new XMLWriter(os,format):构造XML写入器
xmlWriter.write(document):将内存中的document对象写入硬盘
firstCarElement.remove(firstCarPriceElement):从直接父元素删除直接子元素
//firstCarPriceElement.getParent().remove(firstCarPriceElement):从直接父元素删除直接子元素
5.代码练习(实现对xml的crud操作,只是在对xml的cud中都蕴含着r,所以并没有单独写r)
xml源文件(student.xml):
<?
xml version="1.0" encoding="UTF-8"?
>
<Person>
<Student num="2014072201" >
<name>一叶扁舟</name>
<age>22</age>
<profession>软件project</profession>
</Student>
<Student num="2014072202">
<name>努力</name>
<age>21</age>
<profession>软件project</profession>
<sex>女</sex>
</Student>
</Person>
測试代码(Demo.java):
package cn.wwh.www.xml.dom4j;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
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;
/**
*类的作用:採用xml的dom4j解析xml文件,并可以实现(CRUD操作)
*注意:
* 1.採用xpp3reader的解析方式
XPP3Reader xpp3Reader = new XPP3Reader();
Document document = xpp3Reader.read(new File(filePath));
不知道为啥不行????
*
*
*@author 一叶扁舟
*@version 1.0
*@创建时间: 2014-7-22 上午10:39:47
*/
public class Demo2 {
private final static String filePath = "src/cn/wwh/www/xml/dom4j/student.xml";
// 实现xml属性和元素的添加
@Test
public void create() throws Exception{
// 採用SAXReader的解析方式:
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filePath));
Element root = document.getRootElement();
// 获取Person下的第一元素Student
Element firstElement = (Element) root.elements().get(0);
// 为第一个Student,加入一个属性id,属性值为:"19920101"
firstElement.addAttribute("id", "19920101");
firstElement.addElement("sex").setText("男");
// 输出根节点下的全部东西
List<Element> elements = root.elements();
System.out.println("根节点下有:"+elements.size()+"元素");
for (Element e : elements) {
// 获取student的属性
Attribute attribute = e.attribute(0);
System.out.println("标签名:"+e.getName());
System.out.println(e.getName()+"属性
值:"+attribute.getData()+"\n" +
"attribute.getName():"+attribute.getName()+"\n" +
"attribute.getText():"+attribute.getText());
// 获取全部的子标签
List<Element> child = e.elements();
for (Element element : child) {
System.out.println(element.getName()+":"+
element.getText());
}
}
// 将数据写会到xml文件里
OutputStream os = new FileOutputStream(filePath);
OutputFormat of = OutputFormat.createPrettyPrint();
OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");
XMLWriter xmlWrite = new XMLWriter(osw, of);
xmlWrite.write(document);
xmlWrite.flush();
xmlWrite.close();
}
// 实现对xml文件的改动
@Test
public void update() throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filePath));
Element root =
document.getRootElement();
System.out.println(root.getName());
// 获取第一个Student
Element firstStudent = (Element) root.elements().get(0);
Element sex = firstStudent.element("sex");
// firstStudent.element("sex").setText("女");
System.out.println(sex.getName());
sex.setText("男");
// 将数据写进xml文件里
OutputStream os = new FileOutputStream(filePath);
OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");
OutputFormat of = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(osw,of);
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
}
// 实现对xml的删除操作
@Test
public void delete() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File(filePath));
Element element = document.getRootElement();
Element firstStudent = (Element) element.elements().get(0);
// 获取Student 的属性id
Attribute attribute = firstStudent.attribute("id");
System.out.println(attribute.getName());
firstStudent.remove(attribute);
// firstStudent.remove();
// 删除第一Student下sex的元素:
Element sex = firstStudent.element("sex");
sex.getParent().remove(sex);
// sex.remove(sex);
// 将数据写回文件里
XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(filePath),"UTF-8"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.flush();
writer.close();
}
}
代码測试效果图(只显示的create的效果图):
xml(3)--dom4j实现crud操作的更多相关文章
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...
- xml&dom_sax&dom4j的常见操作
<? xml version =”1.0” encoding=”GB2312”?> <!-- 学生信息—><?xml-stylesheet type=”text/css” ...
- 【JAVA解析XML文件实现CRUD操作】
一.简介. 1.xml解析技术有两种:dom和sax 2.dom:Document Object Model,即文档对象模型,是W3C组织推荐的解析XML的一种方式. sax:Simple API f ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- 使用DOM进行xml文档的crud(增删改查)操作<操作详解>
很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...
- xml之dom4j解析
* 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- 使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
随机推荐
- linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- QT+vs2010下改变可执行程序的图标
原地址:http://blog.163.com/tijijun@126/blog/static/6820974520134209457308/ 在解决方案下面的工程里,点击右键 ->选择[添加( ...
- 创建了一个基于最短路径规划geoserver的wms服务
两点之间的文章书面请求随机最短路径sql功能,这篇文章是关于如何将上述到系统中的子功能. 1.geoserver登录 首先单击geoserver安装路径下的start Geoserver 待geose ...
- 报错消息写在AT SELECTION-SCREEN OUTPUT和START-OF-SELECTION事件下的区别
今天面试没答上来的问题,其实我是知道的,以前也遇到过.... START-OF-SELECTION下的话会在左下角报错 AT SELECTION-SCREEN OUTPUT消息会弹出框,然后点击就没有 ...
- innerXml,outerXml,innerText的不同
原文:innerXml,outerXml,innerText的不同 昨天看到咱们园子里有一个仁兄写的关于xml的有关操作,在读的过程中,由于是初学者有不明白的地方就查资料,发现自己多innerXml, ...
- linux安装Tesseract-OCR
安装Tesseract-OCR 1. leptonica 需要源码编译安装http://www.leptonica.org/ leptonica 包: leptonica-1.73.tar.gz 解 ...
- 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
一.对UITabBar背景和icon图标的一些设置 (1)由于直接给UITabBar设置的背景颜色显示的不纯.半透明的感觉,所以,有时候我们能够直接利用纯色的图片作为背景达到想要的效果. (2)给ic ...
- 线段树菜鸟一题+归并排序【求逆序数】POJ2299
题目链接:http://poj.org/problem?id=2299 归并排序解法链接:http://blog.csdn.net/lyy289065406/article/details/66473 ...
- PHP JSON_ENCODE 不转义中文汉字的方法
ios程序中不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上非常多,可是事实上都是错误的,正确的方法是在json_e ...
- Swift - 按钮(UIButton)的用法
1,按钮的创建 (1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDisc ...