首先 ,我自己写一个类实现了ErrorHandler 接口,然后重写了里面的三个方法;然后是主函数调用。-------------------实现了ErrorHandler 接口------------------------------------------------------------------
package sax;import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;public class ErrorHandlerE implements ErrorHandler {
public void error(SAXParseException exception) throws SAXException {
System.out.println("错误报告(error):");
System.out.println("错误行:" + exception.getColumnNumber());
System.out.println("系统标识:" + exception.getSystemId());
System.out.println("错误信息:" + exception.getMessage());
System.out.println("异常中的异常:" + exception.getException());//不知到这个异常是干吗用的,因为输出的都是null } public void fatalError(SAXParseException exception) throws SAXException {
System.out.println("错误报告(fatalError):");
System.out.println("错误行:" + exception.getColumnNumber());
System.out.println("系统标识:" + exception.getSystemId());
System.out.println("错误信息:" + exception.getMessage());
System.out.println("异常中的异常:" + exception.getException());//这个也是null
} public void warning(SAXParseException exception) throws SAXException {
System.out.println("警告(warning):");
System.out.println("警告行:" + exception.getColumnNumber());
System.out.println("系统标识:" + exception.getSystemId());
System.out.println("警告信息:" + exception.getMessage());
System.out.println("异常中的异常:" + exception.getException());
}}------------------主函数------------------------------------------------------------------
package sax;import java.io.IOException;import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;public class ErrorHandlerMain {
public static void main(String[] args) { try {
XMLReader reader = XMLReaderFactory.createXMLReader();
// 设置功能标志的值,前面引号里的值是固定的么?疑惑还有其他的值么?我感觉好像是标识使用过滤器的意思,前面的值是固定的,后面true标识使用呗。^_^
reader.setFeature("http://xml.org/sax/features/validation", true);
reader.setErrorHandler(new ErrorHandlerE());
reader.parse("xml/errorXML.xml");
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
}
------------------xml/errorXML.xml------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<student id="a001">
This is student.
<name>zhangsan</name></student>------------------MyEclipse控制台中out出来的东东-----------------------------------------------------------
错误报告(error):
错误行:9
系统标识:file:///E:/temp/ws0905/web1/xml/errorXML.xml
错误信息:Document is invalid: no grammar found.
异常中的异常:null//各位牛人,这里输出的是null啦,why,这里的异常表示的是哪里出现异常了才会显示出来呢?错误报告(error):
错误行:9
系统标识:file:///E:/temp/ws0905/web1/xml/errorXML.xml
错误信息:Document root element "student", must match DOCTYPE root "null".
异常中的异常:null
--------------------疑惑-------------------------------------------------------为了寻找“异常中的异常”标识的是哪一块的异常,我不停的变换XML文件中的内容,把name写错,把编码写错,但是这里始终都是null,郁闷
求教各位牛人,感谢~~~~

解决方案 »

  1.   

    主要是想知道这句是怎么解释的...:reader.setFeature("http://xml.org/sax/features/validation", true); 
    还有这个null值:System.out.println("异常中的异常:" + exception.getException()); 
    谢谢各位,谢谢牛人费心点的看看啊   。我尽量把分分往高手身上塞.
      

  2.   

    SAXParseException 继承的SAXException, getException是SAXException 中的方法,他里面的exception是SAXException 构造的时候放进去的
    这个一般不会用到  编写解析器的时候才会用到  
    所以直接使用才会返回null 多看看api,上面都写的很清楚。
      

  3.   

    URI不是固定的,但是URI不可以随便起,XMLReader是根据你的URI来查找或设置功能标志的。用 setFeature可以改变分析器的行为(如要求分析检验一个XML文档的合法性),或注册新的事件处理类型。比如,你的分析器将进行一系列的操作,中间可能有多个URI功能请求,通过setFeature方法可以阻止或者允许后面的URI功能请求操作。
    要求所有的 XMLReader 都能识别 http://xml.org/sax/features/namespaces 和 http://xml.org/sax/features/namespace-prefixes 功能名称。
    要求所有的 XMLReader 支持把 http://xml.org/sax/features/namespaces 设置为 true,把 http://xml.org/sax/features/namespace-prefixes 设置为 false。
      

  4.   

    谢谢ls的 ,大体有个概念了...>