dom4j解析xml的小案例

package gz.itcast.contact;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

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.contact;

import java.util.List;

/**
 * 该接口用于存放联系人相关操作的方法。
 * @author APPle
 *
 */
public interface ContactOperator {
    public void addContact(Contact contact);//增加联系人
    public void updateContact(Contact contact);//修改联系人
    public void deleteContact(String id);//根据ID删除联系人
    public List<Contact> findAll();//查询所有联系人
}
 

 

 

package gz.itcast.contact;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
 * 实现联系人操作接口
 * @author APPle
 *
 */
public class ContactOperatorImpl implements ContactOperator {

    /**
     * 添加联系人
     */
    @Override
    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");
            contactElem.addAttribute("id", contact.getId());
            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);
        }
    }

 

    /**
     * 修改联系人
     */
    @Override
    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);
        }
        
        
    }
    
    /**
     * 删除联系人
     */
    @Override
    public void deleteContact(String id) {
        try {
            //1.读取xml文件
            Document doc = XMLUtil.getDocument();
            //2.查询需要删除id的contact
            Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");
            //删除标签
            contactElem.detach();
            
            //3.把Document写出到xml文件
            XMLUtil.write2xml(doc);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 查询所有联系人
     */
    @Override
    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 static void main(String[] args) {
        try {
            /*Scanner scanner = new Scanner(System.in);
            String command = scanner.next();*/
            
            BufferedReader br = 
                            new BufferedReader(new InputStreamReader(System.in));
            
            ContactOperator operator = new ContactOperatorImpl();
            //不断接收输入
            while(true){
                //1.看到菜单
                printMenu();
                
                //2.接收用户输入的命令
                String command = br.readLine();
                
                //3.根据用户的输入执行不同的操作
                if("1".equals(command)){
                    //添加联系人
                    //获取用输入的数据
                    Contact contact  = new Contact();
                    //获取ID
                    System.out.println("请输入编号:");
                    String id = br.readLine();
                    //获取姓名
                    System.out.println("请输入姓名:");
                    String name = br.readLine();
                    //获取性别
                    System.out.println("请输入性别:");
                    String gender = br.readLine();
                    //获取年龄
                    System.out.println("请输入年龄:");
                    String age = br.readLine();
                    //获取电话
                    System.out.println("请输入电话:");
                    String phone = br.readLine();
                    //获取邮箱
                    System.out.println("请输入邮箱:");
                    String email = br.readLine();
                    //获取QQ
                    System.out.println("请输入QQ:");
                    String qq = br.readLine();
                    
                    contact.setId(id);
                    contact.setName(name);
                    contact.setGender(gender);
                    contact.setAge(Integer.parseInt(age));
                    contact.setPhone(phone);
                    contact.setEmail(email);
                    contact.setQq(qq);
                    
                    operator.addContact(contact);
                }else if("2".equals(command)){
                    //修改联系人
                    //获取用输入的数据
                    Contact contact  = new Contact();

                    //获取ID
                    System.out.println("请输入需要修改的编号:");
                    String id = br.readLine();
                    //获取姓名
                    System.out.println("请输入修改后的姓名:");
                    String name = br.readLine();
                    //获取性别
                    System.out.println("请输入修改后的性别:");
                    String gender = br.readLine();
                    //获取年龄
                    System.out.println("请输入修改后的年龄:");
                    String age = br.readLine();
                    //获取电话
                    System.out.println("请输入修改后的电话:");
                    String phone = br.readLine();
                    //获取邮箱
                    System.out.println("请输入修改后的邮箱:");
                    String email = br.readLine();
                    //获取QQ
                    System.out.println("请输入修改后的QQ:");
                    String qq = br.readLine();
                    
                    contact.setId(id);
                    contact.setName(name);
                    contact.setGender(gender);
                    contact.setAge(Integer.parseInt(age));
                    contact.setPhone(phone);
                    contact.setEmail(email);
                    contact.setQq(qq);
                    
                    
                    operator.updateContact(contact);
                }else if("3".equals(command)){
                    //删除联系人
                    //获取需要删除的ID
                    System.out.println("请输入删除的编号:");
                    String id = br.readLine();
                    
                    operator.deleteContact(id);
                }else if("4".equals(command)){
                    //查询所有联系人
                    List<Contact> list = operator.findAll();
                    //打印输出
                    for (Contact con : list) {
                        System.out.println(con);
                    }
                }else if("Q".equals(command)){
                    break;
                }else{
                    System.out.println("输入的命令有误!");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new  RuntimeException(e);
        }
            
        
    }

    private static void printMenu() {
        System.out.println("====================");
        System.out.println("[1]添加联系人");
        System.out.println("[2]修改联系人");
        System.out.println("[3]删除联系人");
        System.out.println("[4]查看所有联系人");
        System.out.println("[Q]退出系统");
        System.out.println("====================");
    }

转载于:https://my.oschina.net/mclongyi/blog/704653

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值