java中用xml文件的形式实现简单的图书管理系统

/*新建一个xml文件,然后通过程序往xml文件中添加书籍,实现的功能有:添加书籍,查看当前的所有书籍,根据书名删除书籍,根据书名,价格,出版日期修改书籍等*/

package cms;


import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Attribute;
import org.dom4j.Comment;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.Text;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class AppMain {

    static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) throws Exception {
        
        while(true){
            System.out.println("请选择功能:  A(添加)  B(查询)  C(删除)  D(更新)");
            String option = scanner.next();
            if("a".equalsIgnoreCase(option)){
                //添加
                addXml();
            }else if("b".equalsIgnoreCase(option)){
                //查询
                searchXml();
            }else if("c".equalsIgnoreCase(option)){
                //删除
                deleteXml();
            }else if("d".equalsIgnoreCase(option)){
                //更新
                updateXml();
            }
        }
    }
    
    //更新
    public static void updateXml() throws Exception{
        System.out.println("请输入需要更新的书名:");
        String oldName = scanner.next();
        System.out.println("请输入更新后的名字:");
        String newName = scanner.next();
        /*System.out.println("请输入需要更新的价格:");
        String oldPrice = scanner.next();*/
        System.out.println("请输入更新后的价格:");
        String newPrice = scanner.next();
        /*System.out.println("请输入需要更新的出版日期:");
        String oldPublicDate = scanner.next();*/
        System.out.println("请输入更新后的出版日期:");
        String newPublicDate = scanner.next();
        
        
        //获取xml解释器
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("books.xml");
        //获取根节点
        Element rootEle = document.getRootElement();
        
        //获取到所有book的标签
        List<Element> books = rootEle.elements("book");
        for(Element book : books){
            String getName = book.element("name").getText();
            if(oldName.equals(getName)){
                Element oldEle = book.element("name");
                oldEle.setText(newName);
                Element priceEle = book.element("price");
                priceEle.setText(newPrice);
                Element publicDateEle = book.element("publicDate");
                publicDateEle.setText(newPublicDate);
            }
        }
        writeXml(document);
        
        
    }
    
    //删除
    public static void deleteXml() throws Exception{
        System.out.println("请输入你要删除的书名:");
        String name = scanner.next();
        //获取xml解释器
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("books.xml");
        //获取根节点
        Element rootEle = document.getRootElement();
        
        //获取到所有book的标签
        List<Element> books = rootEle.elements("book");
        for(Element book : books){
            String name2 = book.element("name").getText();
            if(name.equals(name2)){
                rootEle.remove(book);
            }
        }
        writeXml(document);
        
    }
    
    
    //添加
    public static void addXml() throws Exception{
        System.out.println("请输入id:");
        String id = scanner.next();
        System.out.println("请输入name:");
        String name = scanner.next();
        System.out.println("请输入price:");
        String price = scanner.next();
        System.out.println("请输入publi:");
        String publi = scanner.next();
        System.out.println("请输入publicDate:");
        String publicDate = scanner.next();
        //获取xml解释器
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("books.xml");
        //获取根节点
        Element rootEle = document.getRootElement();
        if(rootEle==null){
            rootEle = DocumentHelper.createElement("books");
        }
    
//        Document document1 = DocumentHelper.createDocument(rootEle);
        //在指定节点上添加子节点
    
        Element bookEle = rootEle.addElement("book");
        bookEle.addElement("id").setText(id);
        bookEle.addElement("name").setText(name);
        bookEle.addElement("price").setText(price);
        bookEle.addElement("publi").setText(publi);
        bookEle.addElement("publicDate").setText(publicDate);
        
        writeXml(document);
    }
    
    public static void readXml(Element element,StringBuilder sb){
        //添加根节点开始标签的开始部分
        sb.append("<"+element.getName());
        //获取所有的属性节点
        Iterator<Attribute> attriIt = element.attributeIterator();
        while(attriIt.hasNext()){
            Attribute attribute = attriIt.next();
            sb.append(" "+attribute.getName()+"=\""+attribute.getValue()+"\"");
        }
        
        //添加开始标签的结束部分
        sb.append(">");
        
        //获取子节点
        Iterator<Node> nodes = element.nodeIterator();
        while(nodes.hasNext()){
            Node node = nodes.next();
            if(node instanceof Text){
                sb.append(node.getText());
            }else if(node instanceof Comment){
                sb.append("<!--"+node.getText()+"-->");
            }else if(node instanceof Element){
                readXml((Element)node,sb);
            }
        }
        //添加结束标签
        sb.append("</"+element.getName()+">");
                
    }
    
    //查看
    public static void searchXml() throws Exception{
        //获取xml解释器
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("books.xml");
        //获取根节点
        Element rootEle = document.getRootElement();
        StringBuilder sb = new StringBuilder();
        readXml(rootEle,sb);
        System.out.println(sb);
        
    }
    
    public static void writeXml(Document document) throws Exception{
        //xml格式器
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        outputFormat.setEncoding("gbk");
        
        //创建XMLWriter
        FileWriter fileWriter = new FileWriter("books.xml");
        XMLWriter xmlWriter = new XMLWriter(fileWriter,outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
    
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值