黑马程序员技术交流社区
标题:
我遇到的Node陷阱
[打印本页]
作者:
如梦初醒
时间:
2012-4-3 23:47
标题:
我遇到的Node陷阱
本帖最后由 如梦初醒 于 2012-4-3 23:52 编辑
在学习方立勋老师JavaWeb视频教程过程中,有一个学生成绩管理系统,听了之后我尝试着自己做一下,做的过程中遇到了百思不得其解的问题,后来在网上找了一些结论又结合jdj1.6文档终于解决了问题。
我的写的学生成绩管理系统部分源码,注释部分陷阱部分,原来用注释部分运行结果抛出了如下异常:java.lang.RuntimeException: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be casttoorg.w3c.dom.Elementatcom.crowndint.studentmanager.DataAccessObject.delete(DataAccessObject.java:70)
ClassCastException
问题出现在:
public void delete(String name){
// try {
// NodeList nodeList=root.getChildNodes();
// for(int i=0;i<nodeList.getLength();i++){
// Element studentTag=(Element)nodeList.item(i);
// if(studentTag.getElementsByTagName("姓名").item(0).getTextContent().equals(name)){
// root.removeChild(studentTag);
// XMLUtils.write2XmlFile(document);
// return;
// }
// }
// } catch (Exception e) { throw new RuntimeException(e); }
// }
这段代码上,不能忽略xml空白部分,xml空白部分也会被解析,也是节点(Node),
Xml空白部分,在jdk文档上属于Text类,也是Node的子类
public interface Text
extends Node, Text
看了jdk文档后我有写了一个测试程序 DomTest2.java
package com.crowndint.studentmanager;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
public class XMLUtils {
public static Document getDocument() throws Exception {
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document dom=db.parse("student.xml");
return dom;
}
public static void write2XmlFile(Document document) throws Exception{
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult(new FileOutputStream("student.xml")));
}
}
package com.crowndint.studentmanager;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DataAccessObject {
private static Document document;
private static Element root;
static{
try {
document=XMLUtils.getDocument();
root=document.getDocumentElement();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2