Dom4j操作XML实战,解析和插入XML实例
本例子是用XML来代替数据库的,XML的每个节点代替数据库一行数据。
直说过程:
XML文件结构:定义了一个名为:User.xml的文件:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="0001" name="小米" password="xiaomi" birthday="1980-09-03" nickname="小强"/>
</users>
定义一个XML操作的工具类:
获取XML文件路径的方法:
private static String fillpath=XmlUtill.class.getClassLoader().getResource("User.xml").getPath();
但是,由于fillpath的路径名称中包含中文,为了处理这个,需要做中文处理,加上:
private static String fillpath;
static {
fillpath=XmlUtill.class.getClassLoader().getResource("User.xml").getPath();
try {
fillpath = URLDecoder.decode(fillpath,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(fillpath);
}
工具类完整代码:
主要包含:获取Document和写入XML两个操作:
package com.Utill; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class XmlUtill { private static String fillpath;
static {
fillpath=XmlUtill.class.getClassLoader().getResource("User.xml").getPath();
try {
fillpath = URLDecoder.decode(fillpath,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//System.out.println(fillpath);
}
//获取Document
public static Document getDocument() throws Exception
{
SAXReader reader=new SAXReader();
Document document=reader.read(new File(fillpath));
return document;
}
//将Document写入XML
public static void writToXml(Document document) throws IOException
{
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter writer=new XMLWriter(new FileOutputStream(fillpath),format);
writer.write(document); format=OutputFormat.createPrettyPrint();
writer=new XMLWriter(System.out,format);
writer.write(document);
}
}
定义一个POJO:User
package com.domain;
import java.util.Date;
public class User {
private String id;
private String name;
private String password;
private Date birthday;
private String nickname;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", birthday=" + birthday + ", nickname="
+ nickname + "]";
}
}
定义一个UserImpl类,用来对xml进行查询,新增操作,模拟数据库的查询和新增操作
package com.dao; import java.text.SimpleDateFormat;
import org.dom4j.Document;
import org.dom4j.Element; import com.Utill.XmlUtill;
import com.domain.User; public class UserDaoImpl { public void add(User user)
{
try {
Document document=XmlUtill.getDocument();
Element root=document.getRootElement(); Element user_tag=root.addElement("user");
user_tag.addAttribute("id", "0002");
user_tag.addAttribute("name", "华为");
user_tag.addAttribute("password","华为");
user_tag.addAttribute("birthday", user.getBirthday()==null?" ":user.getBirthday().toLocaleString());
user_tag.addAttribute("nickname", "大强"); XmlUtill.writToXml(document);
} catch (Exception e) {
e.printStackTrace();
} } public User find(String name,String password)
{
try { Document document;
document = XmlUtill.getDocument(); Element e=(Element) document.selectSingleNode("//user[@name='"+name+"' and @password='"+password+"']");
if(e==null)
return null;
User user=new User();
String date=e.attributeValue("birthday");
if(date==null||date.equals(""))
user.setBirthday(null);
else
{
//日期转换类
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM--dd");
user.setBirthday(df.parse(date));
} user.setId(e.attributeValue("id"));
user.setName(e.attributeValue("name"));
user.setPassword(e.attributeValue("password"));
user.setNickname(e.attributeValue("nickname")); System.out.println(user.toString());
return user;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
测试类,测试查询和新增功能:
package com.Test;
import java.util.Date;
import org.junit.jupiter.api.Test;
import com.dao.UserDaoImpl;
import com.domain.User; class UserTest { @Test
void testAdd() {
User user=new User();
user.setId("0002");
user.setName("华为");
user.setPassword("huawei");
user.setBirthday(new Date());
user.setNickname("大强"); UserDaoImpl dao=new UserDaoImpl();
dao.add(user);
} public void TestFind()
{
UserDaoImpl dao=new UserDaoImpl();
dao.find("小米", "xiaomi");
} }
Dom4j操作XML实战,解析和插入XML实例的更多相关文章
- python XML文件解析:用xml.dom.minidom来解析xml文件
python解析XML常见的有三种方法: 一是xml.dom.*模块,是W3C DOM API的实现,若需要处理DOM API则该模块很合适, 二是xml.sax.*模块,它是SAX API的实现,这 ...
- Spring MVC-视图解析器(View Resolverr)-XML视图解析器(Xml View Resolver)示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_xmlviewresolver.htm 说明:示例基于Spring MVC 4.1 ...
- Mybatis源码解析,一步一步从浅入深(四):将configuration.xml的解析到Configuration对象实例
在Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们看到了XMLConfigBuilder(xml配置解析器)的实例化.而且这个实例化过程在文章:Mybatis源码解析,一步一步从浅 ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- python xml文件解析 及生成xml文件
#解析一个database的xml文件 """ <databaselist type="database config"> <dat ...
- [C# | XML] XML 反序列化解析错误:<xml xmlns=''> was not expected. 附通用XML到类解析方法
使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult re ...
- JAVA基础-XML的解析
一.XML的概述 XML的全名为可扩展标记语言(Extensible Markup Language),XML的作用为:1.传输,2.存取数据,3.软件的配置文件.传输现在都用更轻量的Json,而存储 ...
- 【转载并整理】JAVA解析或生成xml的四种方法
参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...
- xml解析 使用dom4j操作xml
使用dom4j操作xml 1 导入 dom4j,的jar包 2 指定要解析的XML文件 SAXReader sr=new SAXReader(); Document document= sr.r ...
随机推荐
- 【转】Mysql行转换为列
From : http://www.cnblogs.com/lhj588/archive/2012/06/15/2550392.html# 今晚需要统计数据生成简易报表,由原表格数据是单行的形式,最好 ...
- Tag Archives: 海明距离
在前一篇文章 <海量数据相似度计算之simhash和海明距离> 介绍了simhash的原理,大家应该感觉到了算法的魅力.但是随着业务的增长 simhash的数据也会暴增,如果一天100w, ...
- Laravel应用性能调优
这次性能测试方案中用到的优化技巧主要基于 Laravel 框架本身及其提供的工具. 关闭应用debugapp.debug=false 缓存配置信息php artisan config:cache 缓存 ...
- 详细解读简单的lstm的实例
http://blog.csdn.net/zjm750617105/article/details/51321889 本文是初学keras这两天来,自己仿照addition_rnn.py,写的一个实例 ...
- ESXI部署OVF模板提示用户已取消操作处理方法
ESXI导出OVF部署到新的ESXI服务器上,Linux主机没有出现用户已取消操作的提示,部署WINDOW虚拟机的时候,提示用户已取消操作,如图: 首先,要先了解为什么会出现这个问题,原因在于,在做 ...
- IT行业简报 2014-2-8
1.微信在“我的银行卡”页面接入嘀嘀打车,三天内微信打车突破10万单,日均订单为70万,其中微信支付订单超过48万单2.三大运营商手机支付用户仅366.3万,与腾讯单月发展手机支付用户500万户相比, ...
- ngularJs项目实战!05: 不同controller作用域之间通信的方式
最近在做d3js + angularjs项目中,经常遇到d3组件与angularjs模块间通信的问题,以及angularjs多个作用域之间互相通信的问题.关于angularjs的作用域概念及其继承模式 ...
- PPT模板中的”书签”
引言 在项目中生成文档报告经常需要word中,其中的关键就是书签,通过定位和替换书签中的值来达到生成定制的报告(详见Word模板中的表格处理):但在PPT中却没有书签这个概念,所以,不能采用这种方式. ...
- android中去掉ListView控件中的分割线
通过设置android:divider="@null" ,可以去掉ListView控件中的分割线 也可以自定义分割线的颜色,比如: <ListView android:id= ...
- SQLServer中查询表结构(表主键 、列说明、列数据类型、所有表名)的Sql语句
SQLServer中查询表结构(表主键 .列说明.列数据类型.所有表名)的Sql语句 1.查询数据库中的所有表名称: SELECT name FROM SysObjects Where XType=' ...