利用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());
}
}
}
}
}

浙公网安备 33010602011771号