黑马程序员技术交流社区

标题: 我遇到的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