【JAVA】java:使用XMLReaderFactory类和XMLReader类解析XML文档

来源:互联网 发布:开个淘宝店需要电脑吗 编辑:程序博客网 时间:2024/04/28 06:22

 
java:使用SAXParserFactory类和SAXParser类解析XML文档 
java:使用JDOM解析XML文档

 

 

 

.java:使用XMLReaderFactory类和XMLReader类解析XML文档  2008-06-17 18:48:17|  分类: 技术资料 |  标签:java  xml   |字号大中小 订阅 .

package xmltest;

import java.io.FileInputStream;
import java.io.IOException;

import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class ErrorProcessor extends DefaultHandler
{
    public void warning(SAXParseException ex) throws SAXException
    {
        System.err.println("[Warning] "+getLocationString(ex)+": "+ex.getMessage());
    }
   
    public void error(SAXParseException ex) throws SAXException
    {
        System.err.println("[Error] "+getLocationString(ex)+": "+ex.getMessage());
    }
   
    public void fatalError(SAXParseException ex) throws SAXException
    {
        System.err.println("[Fatal Error] "+getLocationString(ex)+": "+ex.getMessage());
    }
   
    /**
     * 获取导致错误或者警告的文本结束位置的行号和列号。
     * 如果是实体引发错误,还获取它的公共标识符和系统标识符。
    */
    private String getLocationString(SAXParseException ex)
    {
        StringBuffer str = new StringBuffer();
       
        String publicId = ex.getPublicId();
        if (publicId != null)
        {
            str.append(publicId);
            str.append(" ");
        }
       
        //这里返回XML文件的全路径,比如:file:///D:/dshapp/xmltest/students.xml
        String systemId = ex.getSystemId();
        if (systemId != null)
        {  
            str.append(systemId);
            str.append(':');
        }
       
        str.append(ex.getLineNumber());
        str.append(':');
        str.append(ex.getColumnNumber());
       
        return str.toString();
    }
    /**
    * 输出元素的结束标记,以便于查看不同类型的错误对文档解析的影响。
    */
    public void endElement(String uri,String localName,String qName) throws SAXException
    {
        System.out.println("</"+qName+">");
    }
   
    public static void main(String[] args)
    {
        try
        {
            //利用XMLReaderFactory工厂类,创建XMLReader对象。
         System.setProperty("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser");
            XMLReader xmlReader=XMLReaderFactory.createXMLReader();
            //打开解析器的验证功能。
            xmlReader.setFeature("http://xml.org/sax/features/validation",true);
           
            ErrorProcessor ep=new ErrorProcessor();
            xmlReader.setErrorHandler(ep);
            xmlReader.setContentHandler(ep);
            InputSource is=new InputSource(new FileInputStream("students.xml"));
            xmlReader.parse(is);
            //xmlReader.parse("students.xml");
        }
        catch(SAXException e){System.out.println(e.toString());}
        catch(IOException e){System.out.println(e.toString());}
    }
}

 


PS:需要将包文件:xercesImpl.jar和xml-apis.jar复制到测试项目的\WebRoot\WEB-INF\lib下,在包xercesImpl.jar里,有META-INF\services目录与,里面有一个文件:org.xml.sax.driver,其内容就是“org.apache.xerces.parsers.SAXParser”,这是SAX2的驱动程序。

在这个目录下,还有以下文件:
javax.xml.parsers.DocumentBuilderFactory,内容为:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.parsers.SAXParserFactory,内容为:org.apache.xerces.jaxp.SAXParserFactoryImpl

这些文件中所指定的工厂类名就是XML解析器工厂类,用来构造工厂类的实例,一般为多数解析器提供商采用。

JAXP还包含了一个叫做crimson的解析器,从JAXP1.2开始,SUN公司对Apache的Xerces解析器重新包装了一下,并将org.apache.xerces包名改为了com.sun.org.apache.xerces.internal,然后在JAXP的开发包中一起提供,作为默认的解析器,我们所使用的JDK1.5中包含的默认解析器就是被重新包装过后的Xerces解析器。
在JDK1.4中没有包含这个解析器,需要自己下载。
  评论这张
 转发至微博
 转发至微博
 0人  |  分享到:          阅读(1386)| 评论(0)| 引用 (0) |举报 .
 
java:使用SAXParserFactory类和SAXParser类解析XML文档 
java:使用JDOM解析XML文档.历史上的今天.
相关文章
javax.xml.parsers.FactoryConfigurationError...错误解决 xml配置文件的读取处理 java读取xml配置文件(小结) JAVA解析XML配置文件的读取操作 用java实现基于soap的xml文档网络传输及远程过程调用(rpc) (一) .最近读者
登录后,您可以在此留下足迹。.
jarzen 
SWfan 
承诺需要 
aaa_abc3 
rainfant 
tianzz12 
zhoutao2 
xjh167@1 .评论
点击登录|昵称:
   取消
验证码:换一张

原创粉丝点击