本例子是用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实例的更多相关文章

  1. python XML文件解析:用xml.dom.minidom来解析xml文件

    python解析XML常见的有三种方法: 一是xml.dom.*模块,是W3C DOM API的实现,若需要处理DOM API则该模块很合适, 二是xml.sax.*模块,它是SAX API的实现,这 ...

  2. Spring MVC-视图解析器(View Resolverr)-XML视图解析器(Xml View Resolver)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_xmlviewresolver.htm 说明:示例基于Spring MVC 4.1 ...

  3. Mybatis源码解析,一步一步从浅入深(四):将configuration.xml的解析到Configuration对象实例

    在Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们看到了XMLConfigBuilder(xml配置解析器)的实例化.而且这个实例化过程在文章:Mybatis源码解析,一步一步从浅 ...

  4. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  5. python xml文件解析 及生成xml文件

    #解析一个database的xml文件 """ <databaselist type="database config"> <dat ...

  6. [C# | XML] XML 反序列化解析错误:<xml xmlns=''> was not expected. 附通用XML到类解析方法

    使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult re ...

  7. JAVA基础-XML的解析

    一.XML的概述 XML的全名为可扩展标记语言(Extensible Markup Language),XML的作用为:1.传输,2.存取数据,3.软件的配置文件.传输现在都用更轻量的Json,而存储 ...

  8. 【转载并整理】JAVA解析或生成xml的四种方法

    参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...

  9. xml解析 使用dom4j操作xml

     使用dom4j操作xml 1 导入 dom4j,的jar包   2 指定要解析的XML文件 SAXReader sr=new SAXReader(); Document document= sr.r ...

随机推荐

  1. [转]php socket编程通信

    FROM : http://blog.csdn.net/baixiaoshi/article/details/9399083 今天终于测试成功了php中的socket通信,先看原理图 这里可以清晰的看 ...

  2. python的单例模式:

    python的单例模式:http://funhacks.net/2017/01/17/singleton/ https://www.cnblogs.com/huchong/p/8244279.html ...

  3. Springmvc的handler method参数绑定常用的注解

    转自:http://blog.longjiazuo.com/archives/1149   1. 简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分 ...

  4. spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案 cannot resolve method location

    问题 在spring boot(版本1.5.1.RELEASE)项目中,当准备映射自定义的配置文件属性到类中的时候,发现原本的@ConfigurationProperties注解已将location属 ...

  5. Xilinx FFT IP v9.0 使用

    该ip用于实现N=2**m(m=3~16)点FFT的变换, 实现的数学类型包含: A)      定点全精度 B)      定点缩减位宽 C)      块浮点 每一级蝶型运算后舍入或者取整.对于N ...

  6. 7个提高效率的JavaScript调试工具

    现在的JavaScript事实上已然成为了流行的web语言,即使它并不完美.很多程序员不喜欢用JavaScript写代码,是因为写到后来总会出现各种莫名其妙的bug,而且在开发大型应用程序的过程中很容 ...

  7. 开源ckplayer 网页播放器去logo去广告去水印修改

    功能设置介绍 本教程涉及到以下各点,点击对应标题页面将直接滑动到相应内容: 1:修改或去掉播放器前置logo 2:修改或去掉右上角的logo 3:修改.关闭.设置滚动文字广告 4:去掉右边的开关灯分享 ...

  8. 九度oj-1001-Java

    题目描述:     This time, you are supposed to find A+B where A and B are two matrices, and then count the ...

  9. Android -- Canvas java.lang.UnsupportedOperationException

    干货 java.lang.UnsupportedOperationException at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:2 ...

  10. 【大数据】MongoDB安装(转)

    https://note.youdao.com/share/?id=40be7f77434910e8860c5fd1ef5d24fe&type=note#/ MongoDB安装 环境 Cent ...