| 
         
     
     | 
     | 
    
  
    | 
    java的xml编程(sax) | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
      
当前SAX API有两个版本。我们用第二版(见资源)来做示例。第二版中的类名和方法名与第一版都有出入,但是代码的结构是一样的。 
  SAX是一套API,不是一个解析器,所以这个代码在XML解析器中是通用的。要让示例跑起来,你将需要一个支持SAX v2的XML解析器。我用Apache的Xerces解析器。(见资源)参照你的解析器的getting-started文档来获得调用一个SAX解析器的资料。 
  SAX API 的说明书通俗易读。它包含了很多的详细内容。而使用SAX API的主要任务就是创建一个实现ContentHandler接口,一个供XML 解析器调用以将分析XML文档时所发生的SAX事件分发给处理程序的回调接口。 
  方便起见,SAX API也提供了一个已经实现了ContentHandler接口的DefaultHandler适配器类。 
  一但实现了ContentHandler或者扩展了DefaultHandler类,你只需直接将XML解析器解析一个特定的文档即可。 
  我们的第一个例子扩展DefaultHandler将每个SAX事件打印到控制台。这将给你一个初步的映象,以说明什么SAX事件将会发生及以怎样的顺序发生。 
  作为开始,以下是将在我们的第一个示例中用到的XML文档样本: 
 
  <?xml version="1.0"?>  <simple date="7/7/2000" >  <name> Bob </name>  <location> New York </location>  </simple> 
 
  
| 代码:  |  
package xmltest;  import javax.xml.parsers.*;  import org.xml.sax.*;  import org.xml.sax.helpers.*;  import java.io.*; 
 
 
 
  public class SaxTest extends DefaultHandler { 
 
     // 重载DefaultHandler类的方法     // 以拦截SAX事件通知。     //          // 关于所有有效事件,见org.xml.sax.ContentHandler     //     public void startDocument( ) throws SAXException {        System.out.println( "SAX Event: START DOCUMENT" );     } 
     public void endDocument( ) throws SAXException {        System.out.println( "SAX Event: END DOCUMENT" );     } 
     public void startElement( String namespaceURI,                String localName,                String qName,                Attributes attr ) throws SAXException {           System.out.println( "SAX Event: START ELEMENT[ " +                    localName + " ]" ); 
        // 如果有属性,我们也一并打印出来...                  for ( int i = 0; i < attr.getLength(); i++ ){                     System.out.println( "   ATTRIBUTE: " +                    attr.getLocalName(i) +                    " VALUE: " +                    attr.getValue(i) );        } 
     } 
     public void endElement( String namespaceURI,                String localName,                String qName ) throws SAXException {        System.out.println( "SAX Event: END ELEMENT[ " +                    localName + " ]" );     } 
     public void characters( char[] ch, int start, int length )                    throws SAXException { 
        System.out.print( "SAX Event: CHARACTERS[ " ); 
        try {           OutputStreamWriter outw = new OutputStreamWriter(System.out);           outw.write( ch, start,length );           outw.flush();        } catch (Exception e) {           e.printStackTrace();        } 
        System.out.println( " )" ); 
     } 
 
     public static void main( String[] argv ){ 
        System.out.println( "Example1 SAX Events:" );        try { 
            //  SAXParserFactory  spFactory = SAXParserFactory.newInstance();           // SAXParser sParser = spFactory.newSAXParser(); 
 
           // 建立SAX 2解析器...           XMLReader xr = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); 
           // 安装ContentHandler...           xr.setContentHandler( new SaxTest() ); 
              // 解析文件...           xr.parse( new InputSource(                 new FileReader( "exampleA.xml" )) ); 
 
        }catch ( Exception e )  {           e.printStackTrace();        } 
     } 
  } 
  |   
  需下载xml解析器http://xml.apache.org/dist/xerces-j/Xerces-J-bin.2.5.0.zip 
  jdom解析xml: 
  http://chinaunix.net/forum/viewtopic.php?p=865198#865198  建议下载jdom8得包
   
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |