package com.zrrd.xml.dom;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class BookDao extends JFrame {
// class MyException extends Exception{
// public MyException(){
// super();
// }
// public MyException(String message){
// super(message);
// }
// }
//
public static void addBook(String bookid,String bookname,String author,String price,String type,String shelf,String press,
String data,String remarks,String booknumber,String book_paginal_number)
{
//声明一个文件输出流
FileOutputStream fos = null;
try
{
//1、根据指定的xml生成Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("xml/books.xml");
//2、在Document对象的根节点下生成book节点
//得到当前文档的子节点
Element rootElement = document.getRootElement();//根据根元素
List<Element> list = rootElement.elements() ;
//遍历List的方法
for (Element e:list){
//System.out.println(e.attributeValue("bookid"));
if(e.attributeValue("bookid").equals(bookid)){
JOptionPane.showMessageDialog(null, "此书信息已存在");
return;
}
}
//在跟元素下添加一个新元素(标签)
Element bookElement = rootElement.addElement("book");
//3、给book节点添加属性 bookid和子节点 name,author,price
//给bookElement添加属性
bookElement.addAttribute("bookid", bookid);
//在bookElement中添加子元素并设置标签文字
bookElement.addElement("name").setText(bookname+"");
if(bookname == null || "".equals(bookname.trim()))
{
JOptionPane.showMessageDialog(null, "名字不能为空");
throw new NullPointerException("名字不能为空");
}
if(bookname.charAt(0)==' ')
{
JOptionPane.showMessageDialog(null, "名字不能以空格开头");
throw new NullPointerException("名字不能以空格开头");
}
bookElement.addElement("author").setText(author+"");
bookElement.addElement("price").setText(price+"");
bookElement.addElement("type").setText(type+"");
bookElement.addElement("press").setText(press+"");
bookElement.addElement("data").setText(data+"");
bookElement.addElement("remarks").setText(remarks+"");
bookElement.addElement("booknumber").setText(booknumber+"");
bookElement.addElement("paginal_number").setText(book_paginal_number+"");
bookElement.addElement("shelf").setText(shelf+"");
//4、根据添加之后的Document对象再生成一次(对原有文件进行替换)
//将document放入流中
fos = new FileOutputStream("xml/books.xml");//写回源文件(打算替换)
XMLWriter writer = new XMLWriter(fos);//
//根据改完的document再写一次
writer.write(document);
JOptionPane.showMessageDialog(null, "添加成功");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
//关流
if(fos != null)
{
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static List<Map<String,Object>> inquriyBook(String bookID)
{
//声明List<Map<String,Object>>对象,保存读取到的信息
List<Map<String,Object>> bookList = new ArrayList<Map<String,Object>>();
//利用dom4j读取xml文件
//声明文件输出流
//List<Element> list = new ArrayList<Element>();
FileOutputStream fos = null;
try {
//将源文件放入流中(Document对象) 1
//创建文档解析器
SAXReader reader = new SAXReader();
//根据指定的XML生成对应dom对象(流)
Document document = reader.read("xml/books.xml");
Element bookElement = (Element)document.selectSingleNode("//book[@bookid='"+bookID+"']");
//找到流中book标签
//List<Element> books =document.selectNodes("//book"); //2找节点集合
//遍历所有的book节点
//for(Element bookElement : books)
// {
//读取出book的name,author,price,bookid
//从元素中得到bookid属性
String bookid = bookElement.attributeValue("bookid");
//读取bookElement下的(唯一)子节点
// Element nameElement = (Element)bookElement.selectSingleNode("name");
// Element authorElement = (Element)bookElement.selectSingleNode("author");
// Element priceElement = (Element)bookElement.selectSingleNode("price");
// Element typeElement = (Element)bookElement.selectSingleNode("type");
// Element shelfElement = (Element)bookElement.selectSingleNode("shelf");
// Element pressElement = (Element)bookElement.selectSingleNode("press");
// Element dataElement = (Element)bookElement.selectSingleNode("data");
// Element remarksElement = (Element)bookElement.selectSingleNode("remarks");
// Element booknumberElement = (Element)bookElement.selectSingleNode("booknumber");
// Element paginal_numberElement = (Element)bookElement.selectSingleNode("paginal_number");
//得到书名,作者,价格
String bookname = bookElement.selectSingleNode("name").getText();//得到标签间夹的文本
String author = bookElement.selectSingleNode("author").getText();
String price = bookElement.selectSingleNode("price").getText();
String type = bookElement.selectSingleNode("type").getText();
String shelf = bookElement.selectSingleNode("shelf").getText();
String press = bookElement.selectSingleNode("press").getText();
String data = bookElement.selectSingleNode("data").getText();
String remarks = bookElement.selectSingleNode("remarks").getText();
String booknumber = bookElement.selectSingleNode("booknumber").getText();
String paginal_number = bookElement.selectSingleNode("paginal_number").getText();
//将它放入Map中
Map<String,Object> book = new HashMap<String,Object>();
book.put("BOOKID", bookid);
book.put("BOOKNAME", bookname);
book.put("AUTHOR", author);
book.put("PRICE", price);
book.put("PRESS", press);
book.put("TYPE", type);
book.put("SHELF", shelf);
book.put("DATA", data);
book.put("REMARKS", remarks);
book.put("BOOKNUMBER", booknumber);
book.put("PAGINAL_NUMBER", paginal_number);
//将装好值得Map放入List
bookList.add(book);
//}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
JOptionPane.showMessageDialog(null, "信息不存在");
}
finally
{
if(fos != null)
{
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return bookList;
}
public static void deleteBook(String bookid)
{
//定义文件输出流
FileOutputStream fos = null;
try {
//根据当前xml文件生成document对象
SAXReader reader = new SAXReader();
Document document = reader.read("xml/books.xml");
//在document对象中得到根节点
Element rootElement = document.getRootElement();
//再找到bookid对应的节点
Element bookElement = (Element) document.selectSingleNode("//book[@bookid='"+bookid+"']");
bookElement.selectSingleNode("name");
//在根节点下删除该节点
rootElement.remove(bookElement);
//将删除完毕的document再次生成xml(再写一遍)
fos = new FileOutputStream("xml/books.xml");
XMLWriter writ
评论0
最新资源