| 
         
     
     | 
     | 
    
  
    | 
    XML的JAVA 解析(一)(6a) | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    下列代码说明这种ContentHandler轮换技术。Contents缓存被类Example6和其它特定ContentHandler内部类共享: 
import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; import java.util.*; import common.*;
  public class Example6 extends DefaultHandler {
 
     // XML解析...    XMLReader parser;
          // 被解析对象...         Example6Circle circleMapper = new Example6Circle();         Example6Square squareMapper = new Example6Square();         Example6Triangle triangleMapper = new Example6Triangle();
    // 不同形体的本地向量表...    private Vector circles = new Vector();    private Vector triangles = new Vector();    private Vector squares = new Vector();
    // 从"characters" SAX事件中收集数据的缓存。    private CharArrayWriter contents = new CharArrayWriter();
     // 用XML解析器为参数的构造函数...     Example6( XMLReader parser ) {            this.parser = parser;    }
    // 重载DefaultHandler类以拦截SAX事件的方法。    //         // 头于所有有效事件的详细内容,参见org.xml.sax.ContentHandler。    //    public void startElement( String namespaceURI,                String localName,               String qName,               Attributes attr ) throws SAXException {
        contents.reset();
        if ( localName.equals( "Circle" ) ) {                         Circle aCircle = new Circle();          aCircle.name = attr.getValue( "name" );          circles.addElement( aCircle );          circleMapper.collectCircle( parser, this, aCircle );       }
        if ( localName.equals( "Square" ) ) {                     Square aSquare = new Square();          aSquare.name = attr.getValue( "name" );          squares.addElement( aSquare );          squareMapper.collectSquare( parser, this, aSquare );       }
        if ( localName.equals( "Triangle" ) ) {          Triangle aTriangle = new Triangle();          aTriangle.name = attr.getValue( "name" );          triangles.addElement( aTriangle );          triangleMapper.collectTriangle( parser, this, aTriangle);       }    }
     public void endElement( String namespaceURI,                String localName,               String qName ) throws SAXException {
        // endElement SAX事件中已经没有需要Example 6映射器处理的了。           }
     public void characters( char[] ch, int start, int length )                   throws SAXException {       // // 将数据内容写入缓存。       contents.write( ch, start, length );
     }
     public Vector getCircles() {            return circles;    }
     public Vector getSquares() {            return squares;    }
     public Vector getTriangles() {            return triangles;    }
     public static void main( String[] argv ){
        System.out.println( "Example6:" );       try {
          // 创建SAX 2解析器...          XMLReader xr = XMLReaderFactory.createXMLReader();
          // 安装ContentHandler...          Example6 ex6 = new Example6(xr);          xr.setContentHandler( ex6 );
          // 解析文件...          xr.parse( new InputSource(                new FileReader( "Example6.xml" )) );
           //将圆形对象显示到标准输出...          Circle c;          Vector items = ex6.getCircles();          Enumeration e = items.elements();          while( e.hasMoreElements()){                            c = (Circle) e.nextElement();             c.print( System.out );          }          // // 将长方形对象显示到标准输出...          Square s;          items = ex6.getSquares();          e = items.elements();          while( e.hasMoreElements()){                            s = (Square) e.nextElement();             s.print( System.out );          }
          // 将三角形对象显示到标准输出...          Triangle t;          items = ex6.getTriangles();          e = items.elements();          while( e.hasMoreElements()){                            t = (Triangle) e.nextElement();             t.print( System.out );          }
        }catch ( Exception e )  {          e.printStackTrace();       }    } } (未完待续) 
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |