vitality_data 2017-10-25 07:30 采纳率: 0%
浏览 1692

DOM4J解析XML文件异常?怎么处理?

异常详情:

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开发等

  • 写回答

1条回答 默认 最新

  • 白萝卜。 2017-10-25 09:59
    关注

    //创建标题节点
    Element titleEle=bookEle.addElement("title");
    titleEle.setText(book.getTitle());//添加作者
    //创建作者节点
    Element descEle=bookEle.addElement("description");
    descEle.setText(book.getDesc());//添加作者

        不能是空的,你这里的代码getTitle() ,getDesc()全是空,这个bean类还没有默认值,所以传进去全是空的,这个DOM4J要求非空。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值