异常详情:
DOM4j解析XML文件是出了异常,异常是:Exception in thread "main" java.lang.IllegalArgumentException: Adding text to an XML document must not be null
at org.dom4j.DocumentFactory.createText(DocumentFactory.java:174)
at org.dom4j.tree.AbstractElement.addText(AbstractElement.java:899)
at org.dom4j.tree.AbstractElement.setText(AbstractElement.java:1120)
at BookBiz.addBook(BookBiz.java:59)
at BookBiz.main(BookBiz.java:140)
代码详情:
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class BookBiz {
Document doc=null;
/**
* 加载DOM树
*/
public void loadDocument(){
SAXReader saxReader=new SAXReader();
try {
doc=saxReader.read("src//book.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
* 解析文档
*/
public void showInfo(){
Element root=doc.getRootElement();//获取根节点
Iterator bookIterator=root.elementIterator();
while(bookIterator.hasNext()){
Element bookEle=(Element) bookIterator.next();//获取book节点
String bookId=bookEle.attributeValue("id");//获取id
System.out.println("id="+bookId);
//取遍历book 得到所有的书的属性
Iterator bookAttrabute=bookEle.elementIterator();
while(bookAttrabute.hasNext()){
Element attrElement=(Element) bookAttrabute.next();
System.out.println(attrElement.getText());
}
}
}
/**
* 添加新的图书
*/
public void addBook(Book book){
Element root=doc.getRootElement();//获取根节点 books
//创建book节点
Element bookEle=root.addElement("book");
bookEle.addAttribute("id", book.getId());
//创建作者节点
Element authorEle=bookEle.addElement("author");
authorEle.setText(book.getAuthor());//添加作者
//创建标题节点
Element titleEle=bookEle.addElement("title");
titleEle.setText(book.getTitle());//添加作者
//创建作者节点
Element descEle=bookEle.addElement("description");
descEle.setText(book.getDesc());//添加作者
savaXml("src//book.xml");
}
/**
* 把编号102的作者改为鸭蛋
* @param book
*/
public void modifiedBook(Book book){
Element root=doc.getRootElement();//获取根节点
//遍历book节点
Iterator itBook=root.elementIterator();
while(itBook.hasNext()){
Element bookEle=(Element)itBook.next();
String bookId=bookEle.attributeValue("id");
//找到目标书本的id
if(bookId.equals(book.getId())){
//遍历book的属性节点
Iterator bookChildEle=bookEle.elementIterator();
while(bookChildEle.hasNext()){
Element childEle=(Element)bookChildEle.next();
//找到作者属性 ,更改
if(childEle.getName().equals("author")){
childEle.setText(book.getAuthor());
break;
}
}
}
}
//保存一下
savaXml("src\\book.xml");
}
/**
* 保存xml
*/
public void savaXml(String path){
//获取formate对象
OutputFormat formate=OutputFormat.createPrettyPrint();
formate.setEncoding("gb2312");
try {
//创建writer对象 把文档对象写入目标文件中
XMLWriter writer=new XMLWriter(new FileWriter(path),formate);
writer.write(doc);//把文件写入目标路径中
writer.close();//关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除
* @param args
*/
public void deleBookById(Book book){
Element root=doc.getRootElement();//获取根节点
//遍历book节点
Iterator bookIte=root.elementIterator();
while(bookIte.hasNext()){
Element bookEle=(Element)bookIte.next();//获取其中一本书
String id=bookEle.attributeValue("id");
//找到目标id
if(id.equals(book.getId())){
//删除节点
bookEle.getParent().remove(bookEle);
savaXml("src//book.xml");//保存修改结果
return;
}
}
}
public static void main(String[] args) {
BookBiz bz=new BookBiz();
bz.loadDocument();
//添加一本新书
Book book=new Book();
book.setId("bk102");
book.setAuthor("鸭蛋");
bz.modifiedBook(book);
bz.addBook(book);
// bz.deleBookById(book);
// bz.showInfo();
}
}
XML文件内容:
<?xml version="1.0" encoding="gb2312"?>
<!-- 图书信息 -->
王珊
java高级编程
包含java面向对象编程和web开发等