/*新建一个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();
}
}