欢迎光临
我们一直在努力

解析器的使用(JAXP)-JSP教程,资料/其它

建站超值云服务器,限时71元/月

分析器的使用(一)

作者: 常明 写作日期:2000-4-26

简介
这组文章主要就目前有的xml分析器分别介绍一下他们的接口和用法。
其中包括sun的xml分析器,ibm的分析器xml4j,xml4c,oracle的分析器,expat。
sun的jaxp
jaxp api全部包括在jaxp.jar中,它有两个工厂类 saxparserfactory和documentbuilderfactory 分别对应sax接口和dom接口。
这两个工厂类的作用是,通过设定其中的属性创建合适的分析器,它可以配合各种分析器的具体实现一起使用。这就是说saxparserfactor可以和任何符合sax接口的parser一起用,不一定就是sun的分析器;documentbuidlerfactory也一样,不一定用sun的实现。对于sax只要parser是实现org.xml.sax.parser接口的,对于dom就是文档对象实现了 org.w3c.dom.*的接口。
sun的分析器的实现是com.sun.xml.parser,它是实现了sax接口的,它的dom实现则是基于sax的,所以他们的分析器是一个。
下面介绍dom的编程,首先要引入以下jaxp api定义:
import javax.xml.parsers.documentbuilderfactory;  
import javax.xml.parsers.factoryconfigurationerror;  
import javax.xml.parsers.parserconfigurationexception;
import javax.xml.parsers.documentbuilder;
如果要处理sax异常加入:
import org.xml.sax.saxexception;  
import org.xml.sax.saxparseexception;
文件i/o:
import java.io.file;
import java.io.ioexception;
如果要处理dom异常加入:
import org.w3c.dom.document;
import org.w3c.dom.domexception;
程序如下,声明一个静态全局的dom的document,方便下面的处理,document可以从文件装入,写可以通过程序写入,否则是空的。
public class domecho
{    
    static document document;

    public static void main (string argv [])
    {
        …
    }

在分析过程中的异常处理的程序如下,这里有四种异常的处理:
public static void main (string argv [])
{
    if (argv.length != 1) {
        …
    }

    try {

    } catch (saxparseexception spe) {
       // error generated by the parser
       system.out.println ("\n** parsing error"
          + ", line " + spe.getlinenumber ()
          + ", uri " + spe.getsystemid ());
       system.out.println("   " + spe.getmessage() );

       // use the contained exception, if any
       exception  x = spe;
       if (spe.getexception() != null)
           x = spe.getexception();
       x.printstacktrace();

    } catch (saxexception sxe) {
       // error generated by this application
       // (or a parser-initialization error)
       exception  x = sxe;
       if (sxe.getexception() != null)
           x = sxe.getexception();
       x.printstacktrace();

    } catch (parserconfigurationexception pce) {
       // parser with specified options //can t be built
       pce.printstacktrace();

    } catch (ioexception ioe) {
       // i/o error
       ioe.printstacktrace();
    }

}// main
生成分析器,有两步,首先实例化工厂,再由工厂生成documentbuilder,最后开始分析:
    documentbuilderfactory factory =  documentbuilderfactory.newinstance();
try {
   documentbuilder builder =  factory.newdocumentbuilder();
   document = builder.parse( new file(argv[0]) );

} catch (saxparseexception spe) {

有了document对象后就可以做各种dom操作,以下程序输出xml:
xmldocument xdoc = (xmldocument) document;
  xdoc.write (system.out);

如果要使用sax接口程序就稍复杂一些,首先引入定义:
import java.io.*;
import org.xml.sax.*;
import javax.xml.parsers.saxparserfactory;  
import javax.xml.parsers.parserconfigurationexception;
import javax.xml.parsers.saxparser;

和dom的编程相似,首先一样实例化documentbuilderfactory,创建一个saxparser,然后开始分析,期间处理各种异常:
    public static void main (string argv [])

    {
        if (argv.length != 1) {
            system.err.println (  "usage: cmd filename");
            system.exit (1);
        }

        // use the default (non-validating) parser
        saxparserfactory factory =   saxparserfactory.newinstance();
        try {
         noaction noaction;    
            // parse the input
            saxparser saxparser =  factory.newsaxparser();
            saxparser.setdocumenthandler(noaction);
            saxparser.parse(  new file(argv [0]), new echo() );

        } catch (throwable t) {
            t.printstacktrace ();
        }
        system.exit (0);
    }
但用sax是通过处理事件来进行的,所以在分析之前,一般要设定处理器,使用saxparser的setdocumenthandler方法来设定。 下面是一个什么都不做的事件处理器,它实现了documenthandler接口。
class noaction implement documenthandler{
    …   
   public void startdocument ()
    throws saxexception
    {
    }

    public void enddocument ()
    throws saxexception
    {
    }

    public void startelement (string name, attributelist attrs)
    throws saxexception
    {
    }

    public void endelement (string name)
    throws saxexception
    {
    }

    public void characters (char buf [], int offset, int len)
    throws saxexception
    {
    }
     …
以上就基本介绍了sun的xml分析器的使用,有任何问题请发mail给我们一起讨论。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 解析器的使用(JAXP)-JSP教程,资料/其它
分享到: 更多 (0)