XML学习总结-DOM和SAX解析-综合案例-(四)
来源:互联网 发布:nginx 1.10.2 编辑:程序博客网 时间:2024/04/24 19:21
============DOM解析 vs SAX解析 ========
DOM解析
SAX解析
原理: 一次性加载xml文档,不适合大容量的文件读取
原理: 加载一点,读取一点,处理一点。适合大容量文件的读取
DOM解析可以任意进行增删改成
SAX解析只能读取
DOM解析任意读取任何位置的数据,甚至往回读
SAX解析只能从上往下,按顺序读取,不能往回读
DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。
SAX解析基于事件的编程方法。java开发编码相对复杂。
xml技术学习综合案例
设计一个通讯录程序
联系人: 编号 姓名 性别 年龄 电话 QQ 邮箱
功能要求:
添加联系人
修改联系人
删除联系人
查询所有联系人
-在控制台操作
-数据存储到xml中
entity
package gz.itcast.contactSys_web.entity;/** * 实体对象 * @author APPle * */public class Contact {private String id;private String name;private String gender;private int age;private String phone;private String email;private String qq;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 getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}@Overridepublic String toString() {return "Contact [age=" + age + ", email=" + email + ", gender="+ gender + ", id=" + id + ", name=" + name + ", phone=" + phone+ ", qq=" + qq + "]";}}
dao
package gz.itcast.contactSys_web.dao;import gz.itcast.contactSys_web.entity.Contact;import java.util.List;/** * 联系人的DAO接口 * @author APPle * */public interface ContactDao {public void addContact(Contact contact);//添加联系人public void updateContact(Contact contact);//修改联系人public void deleteContact(String id);//删除联系人public List<Contact> findAll(); //查询所有联系人public Contact findById(String id);//根据编号查询联系人public boolean checkContact(String name);//根据姓名查询是否重复}
package gz.itcast.contactSys_web.dao.impl;import gz.itcast.contactSys_web.dao.ContactDao;import gz.itcast.contactSys_web.entity.Contact;import gz.itcast.contactSys_web.util.XMLUtil;import java.io.File;import java.util.ArrayList;import java.util.List;import java.util.UUID;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class ContactDaoImpl implements ContactDao {/** * 添加联系人 */public void addContact(Contact contact) {try {File file = new File("e:/contact.xml");Document doc = null;Element rootElem = null;if(!file.exists()){/** * 需求: 把contact对象保存到xml文件中 *///如果没有xml文件,则创建xml文件doc = DocumentHelper.createDocument();//创建根标签rootElem = doc.addElement("contactList");}else{//如果有xml文件,则读取xml文件doc = XMLUtil.getDocument();//如果有xml文件,读取根标签rootElem = doc.getRootElement();}//添加contact标签/** * <contact id="1"><name>eric</name><gender>男</gender><age>20</age><phone>1343333</phone><email>eric@qq.com</email><qq>554444</qq></contact> */Element contactElem = rootElem.addElement("contact");/** * 由系统自动生成随机且唯一的ID值,赋值给联系人 */String uuid = UUID.randomUUID().toString().replace("-","");contactElem.addAttribute("id", uuid);contactElem.addElement("name").setText(contact.getName());contactElem.addElement("gender").setText(contact.getGender());contactElem.addElement("age").setText(contact.getAge()+"");contactElem.addElement("phone").setText(contact.getPhone());contactElem.addElement("email").setText(contact.getEmail());contactElem.addElement("qq").setText(contact.getQq());//把Document写出到xml文件XMLUtil.write2xml(doc);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}/** * 删除联系人 */public void deleteContact(String id) {try {//1.读取xml文件Document doc = XMLUtil.getDocument();//2.查询需要删除id的contactElement contactElem = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");//删除标签if(contactElem!=null){contactElem.detach();}//3.把Document写出到xml文件XMLUtil.write2xml(doc);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}/** * 查询所有联系人 */public List<Contact> findAll() {//1.读取xml文件Document doc = XMLUtil.getDocument();//2.创建List对象List<Contact> list = new ArrayList<Contact>();//3.读取contact标签List<Element> conList = (List<Element>)doc.selectNodes("//contact");for(Element e:conList){//创建COntact对象Contact c = new Contact();c.setId(e.attributeValue("id"));c.setName(e.elementText("name"));c.setGender(e.elementText("gender"));c.setAge(Integer.parseInt(e.elementText("age")));c.setPhone(e.elementText("phone"));c.setEmail(e.elementText("email"));c.setQq(e.elementText("qq"));//把Contact放入list中list.add(c);}return list;}/** * 根据编号查询联系人 */public Contact findById(String id) {Document doc = XMLUtil.getDocument();Element e = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");Contact c = null;if(e!=null){//创建COntact对象c = new Contact();c.setId(e.attributeValue("id"));c.setName(e.elementText("name"));c.setGender(e.elementText("gender"));c.setAge(Integer.parseInt(e.elementText("age")));c.setPhone(e.elementText("phone"));c.setEmail(e.elementText("email"));c.setQq(e.elementText("qq"));}return c;}/** * 修改联系人 */public void updateContact(Contact contact) {/** * 需求: 修改id值为2的联系人 * 1)查询id值为2的contact标签 * 2)修改contact标签的内容 */try {//1.读取xml文件Document doc = XMLUtil.getDocument();Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+contact.getId()+"']");//2.修改contact标签内容contactElem.element("name").setText(contact.getName());contactElem.element("gender").setText(contact.getGender());contactElem.element("age").setText(contact.getAge()+"");contactElem.element("phone").setText(contact.getPhone());contactElem.element("email").setText(contact.getEmail());contactElem.element("qq").setText(contact.getQq());//3.把Document写出到xml文件XMLUtil.write2xml(doc);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}public static void main(String[] args) {//测试UUIDString uuid = UUID.randomUUID().toString().replace("-","");System.out.println(uuid);}/** * true:重复 * false:不重复 */public boolean checkContact(String name) {//查询name标签的内容和传入的name值是否一致?Document doc = XMLUtil.getDocument();Element nameElem = (Element)doc.selectSingleNode("//name[text()='"+name+"']");if(nameElem!=null){return true;}else{return false;}}}
service
package gz.itcast.contactSys_web.service;import gz.itcast.contactSys_web.entity.Contact;import gz.itcast.contactSys_web.exception.NameRepeatException;import java.util.List;public interface ContactService {public void addContact(Contact contact)throws NameRepeatException;//添加联系人public void updateContact(Contact contact);//修改联系人public void deleteContact(String id);//删除联系人public List<Contact> findAll(); //查询所有联系人public Contact findById(String id);//根据编号查询联系人}
package gz.itcast.contactSys_web.service.impl;import gz.itcast.contactSys_web.dao.ContactDao;import gz.itcast.contactSys_web.dao.impl.ContactDaoImpl;import gz.itcast.contactSys_web.entity.Contact;import gz.itcast.contactSys_web.exception.NameRepeatException;import gz.itcast.contactSys_web.service.ContactService;import java.util.List;/** * 业务逻辑层 * 处理项目中出现的业务逻辑 * @author APPle * */public class ContactServiceImpl implements ContactService {ContactDao dao = new ContactDaoImpl();public void addContact(Contact contact) throws NameRepeatException {//执行业务逻辑判断if(dao.checkContact(contact.getName())){//重复/** * 注意: 如果业务层方法出现任何业务异常,则返回标记(自定义异常)到servlet */throw new NameRepeatException("姓名重复,不可使用");}//如果不重复,才执行添加方法dao.addContact(contact);}public void deleteContact(String id) {dao.deleteContact(id);}public List<Contact> findAll() {return dao.findAll();}public Contact findById(String id) {return dao.findById(id);}public void updateContact(Contact contact) {dao.updateContact(contact);}}
工具类
package gz.itcast.contactSys_web.util;import java.io.File;import java.io.FileOutputStream;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/** * xml的工具类 * @author APPle * */public class XMLUtil {/** * 读取xml文档方法 * @return */public static Document getDocument(){try {Document doc = new SAXReader().read(new File("e:/contact.xml"));return doc;} catch (DocumentException e) {e.printStackTrace();throw new RuntimeException(e);}}/** * 写出到xml文档中 */public static void write2xml(Document doc){try {FileOutputStream out = new FileOutputStream("e:/contact.xml");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(out,format);writer.write(doc);writer.close();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}}
测试类
package gz.itcast.contactSys_web.test;import gz.itcast.contactSys_web.dao.ContactDao;import gz.itcast.contactSys_web.dao.impl.ContactDaoImpl;import gz.itcast.contactSys_web.entity.Contact;import java.util.List;import org.junit.Before;import org.junit.Test;/** * 联系人操作实现类的测试类 * @author APPle * */public class TestContactOperatorImpl {ContactDao operator = null;/** * 初始化对象实例 */@Beforepublic void init(){operator = new ContactDaoImpl();}@Testpublic void testAddContact(){Contact contact = new Contact();//contact.setId("2");contact.setName("张三2");contact.setGender("男");contact.setAge(20);contact.setPhone("134222233333");contact.setEmail("eric@qq.com");contact.setQq("33334444");operator.addContact(contact);}@Testpublic void testUpdateContact(){Contact contact = new Contact();contact.setId("1"); //修改的IDcontact.setName("李四");contact.setGender("女");contact.setAge(30);contact.setPhone("135222233333");contact.setEmail("zhangsan@qq.com");contact.setQq("33334444");operator.updateContact(contact);}@Testpublic void testDeleteContact(){operator.deleteContact("2");}@Testpublic void testFindAll(){List<Contact> list = operator.findAll();for (Contact contact : list) {System.out.println(contact);}}@Testpublic void testFindById(){Contact contact = operator.findById("1");System.out.println(contact);}@Testpublic void testCheckContact(){System.out.println(operator.checkContact("王五1"));}}
0 0
- XML学习总结-DOM和SAX解析-综合案例-(四)
- XML学习笔记(四):xml解析详解以及使用 DOM和SAX 解析XML :
- DOM综合案例、SAX解析、StAX解析、DOM4J解析
- 解析xml:DOM 和 SAX
- XML 解析---dom解析和sax解析
- DOM 解析和SAX解析 XML 文档
- XML的SAX解析和DOM解析
- dom,sax解析xml
- XML-DOM SAX解析
- xml解析,dom/sax
- SAX和DOM解析XML区别
- 浅述DOM和SAX解析XML
- DOM和SAX解析XML的区别
- Android SAX和DOM解析XML文件
- SAX和DOM解析XML区别
- XML 的 解析 :DOM 和 SAX
- SAX和DOM解析XML区别
- 关于XML文档解析(DOM和SAX)
- debug的基本操作
- XML学习总结-xml概念和dom4j解析技术-(一)
- XML学习总结-XPATH技术-(二)
- 【Ubuntu之旅】(二)——第二站:聊聊VIM
- XML学习总结-SAX解析-(三)
- XML学习总结-DOM和SAX解析-综合案例-(四)
- Mysql 用户登录无权限
- Javascript学习总结-基本语法-(一)
- 继承与初始化
- Javascript学习总结-基本语法-(二)
- Javascript学习总结-基本语法-(三)
- Javascript学习总结-函数-(四)
- Javascript学习总结-面向对象-(五)
- Javascript学习总结-BOM编程-(六)