Dom4j操做XML實戰,解析和插入XML實例

本例子是用XML來代替數據庫的,XML的每一個節點代替數據庫一行數據。java

直說過程:數據庫

XML文件結構:定義了一個名爲:User.xml的文件:api

<?xml version="1.0" encoding="UTF-8"?> <users> <user id="0001" name="小米" password="xiaomi" birthday="1980-09-03" nickname="小強"/> </users>

定義一個XML操做的工具類:dom

獲取XML文件路徑的方法:ide

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兩個操做:this

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:Userspa

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進行查詢,新增操做,模擬數據庫的查詢和新增操做.net

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"); } }
相關文章
相關標籤/搜索