|
class Example6Triangle extends DefaultHandler {
// 当前三角形的本地引用... private Triangle currentTriangle;
// Parent... ContentHandler parent;
// XML 解析器 XMLReader parser;
// 从"characters" SAX事件中收集数据的缓存。 private CharArrayWriter contents = new CharArrayWriter();
public void collectTriangle( XMLReader parser, ContentHandler parent, Triangle newTriangle ) { this.parent = parent; this.parser = parser; parser.setContentHandler( this ); currentTriangle = newTriangle; }
public void endElement( String namespaceURI, String localName, String qName ) throws SAXException {
if ( localName.equals( "x" ) ) { currentTriangle.x = Integer.valueOf (contents.toString().trim()).intValue(); }
if ( localName.equals( "y" ) ) { currentTriangle.y = Integer.valueOf (contents.toString().trim()).intValue(); }
if ( localName.equals( "width" ) ) { currentTriangle.width = Integer.valueOf (contents.toString().trim()).intValue(); }
if ( localName.equals( "height" ) ) { currentTriangle.height = Integer.valueOf (contents.toString().trim()).intValue(); }
if ( localName.equals( "Triangle" ) ) { // 把内容处理器(content handler)换回成parent parser.setContentHandler(parent); }
}
public void characters( char[] ch, int start, int length ) throws SAXException { // 从"characters" SAX事件中收集数据到缓存。 contents.write( ch, start, length );
}
}
注意我们得到了来自shape类的相同输出:
Example6: Circle: circ1 x: 10 y: 10 width: 3 height: 3 Square: sq1 x: 0 y: 0 width: 3 height: 3 Triange: tri1 x: 3 y: 0 width: 5 height: 3 Triange: tri2 x: 5 y: 0 width: 5 height: 3
结论 我们以经论证,当处理得当时SAX较DOM API有很多优势。我们已经涉及到了一些基本的可以让我们高效处理简单及中等复杂度的XML文档的一些理论。我们也指出了使用SAX API的一些要谨慎处理的地方。
最后,我希望当你因为在苛刻的环境中使用DOM API而感到进退两难时会想到SAX API。
在下一篇文章中,我们将解决递归XML结构、混用标签名及SAX数据导航方面的问题。这三个总线贯穿于一个集中处理了容器管理,能够应对最复杂的XML映射的通用类库。
关于作者 Bob Hustead has been wasting way too much time on computers since the Commodore 64 was introduced. 他起初致力于C语言的通信协议与设备驱动开发,后来转移到面象对象设计领域,先是C++后来又是Java。再后来转而致力于中间件架构。Bob目前是一名企业应用底层架构师,效力于纽约城的AIG Insurance。
资源
- 要下载该文的全部源代码zip文件,请到:
http://www.javaworld.com/jw-08-2000/sax/jw-0804-sax.zip
- 关于SAX API 2.0的文档,参见"SAX 2.0/Java final release":
http://www.megginson.com/SAX/Java/index.html
- Java 2 Performance and Idiom Guide, Craig Larman and Rhett Guthrie (Prentice Hall, Aug. 27, 1999):
http://www.amazon.com/exec/obidos/ASIN/0130142603/qid%3D964730084/002-7840394-9715257
- 其它XML的有用信息,参见:
http://www.xml.org
- 关于Apache Xerces XML 解析器,请到:
http://xml.apache.org/xerces-j/index.html |