利用DOM4j格式化输出xml文档后,再用迭代的方式读取时会报ClassCastException

如:

public static void main(String[] args) throws DocumentException {

  SAXReader r = new SAXReader();

  Document doc = r.read(new File("src/dom4j.xml"));

  Element root = doc.getRootElement();//获得根节点

  //获得文档中所有的数据

  Iterator<Element> it = root.nodeIterator();

  while(it.hasNext()){

  Element node = it.next();//此处报ClassCastException异常

  Iterator<Element> it2 = node.nodeIterator();

  while(it2.hasNext()){

    Element n = it2.next();//实际上此处也会报ClassCastException异常

    System.out.println(n.getText());

  }

}

dom4j.xml如下:

<?xml version="1.0" encoding="gbk"?>

<school>

  <student>

    <id>1000</id>

    <name>张三</name>

    <age>19</age>

  </student>

</school>

原因:

格式化输出后,实际上根节点(<school></school>)中会有org.dom4j.tree.DefaultText类型和org.dom4j.tree.DefaultElement类型(<student></student>)的两个节点,而DefaultText指的是节点间的回车或空格,无法转换成强转成Element类型,故会报强转异常。

解决:加上判断语句

public static void main(String[] args) throws DocumentException {

  SAXReader r = new SAXReader();

  Document doc = r.read(new File("src/dom4j.xml"));

  Element root = doc.getRootElement();//获得根节点

  //获得文档中所有的数据

  Iterator<Element> it = root.nodeIterator();

  while(it.hasNext()){

    Object temp = it.next();

    System.out.println(temp.getClass());//org.dom4j.tree.DefaultText

    if(temp instanceof Element){

      Element node=(Element)temp;

      Iterator<Element> it2 = node.nodeIterator();

      while(it2.hasNext()){

        Object temp1 = it2.next();

        if(temp1 instanceof Element){

        Element n=(Element)temp1;

        System.out.println(n.getText());

        }

      }

    }

  }

}

posted @ 2020-11-11 10:16  小凯凯(Walle)  阅读(195)  评论(0)    收藏  举报