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 ...
随机推荐
- Qt中printsupport的注意点和使用方法
问题:Qt中包含QPrintDialog.QPrinter.QPrintPreviewDialog失败:在引入printsupport后报cpp:651: error: undefined refer ...
- andengine的convertLocalCoordinatesToSceneCoordinates方法
使用Tile地图,看过andengine中的例子,都会发现例子中有这么一段话,以前版本的是convertLocalToSceneCoordinates方法. scene.registerUpdateH ...
- ubuntu 安装 android studio
总共分三个步骤: 安装JDK 这里引用下别人的安装过程http://blog.csdn.net/bhq2010/article/details/6839762 注:android studio 版本为 ...
- ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码
以前做asp.net下载功能的时候都是采用:<a href="http://www.wang0214.com/wgcms">下载</a>的方式来实现下载. ...
- IIS通过HTML5实现应用程序缓存的离线浏览
这里我是使用的IIS7: IIS7发布了网站后要想使用HTML5的应用程序缓存,需要增加一个关于文本/缓存清单( text/cache-manifest)的新的MIME类型,选中网站添加一个MIME类 ...
- oracle的行级触发器使用
行级触发器: 当触发器被触发时,要使用被插入.更新或删除的记录中的列值,有时要使用操作前.后列的值. :NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值 例1: 建立一个触发器 ...
- css之图片羽化处理
需求: 对图片做css羽化处理 实现: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
http://blog.csdn.net/scotfield_msn/article/details/60339415 在TensorFlow (RNN)深度学习下 双向LSTM(BiLSTM)+CR ...
- Spring(十一):Spring配置Bean(四)SpEL
Spring表达式语言:SpEL 1)Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 2)语法类似于EL:SpEL使用#{...}作为界定符,所有在大框号 ...
- MarkDownPad Pro 支持github格式的markdown语法
1. http://blog.csdn.net/xiaohei5188/article/details/43964451