1、 String vendorParserClass = org.apache.xerces.parsers.SAXParserXMLReaer reader = XMLReaderFactory.createXMLReader(vendorParserClass);InputSource inputSource = new InputSource(xmlURI);reader.parse(inputSource);这样一个xml文档解析过程就完成了。因为SAX是采用时间处理机制来解析XML 文档的,在解析过程中会触发一些事件,也就是执行特定的方法,你可以实现 这些方法,就可以通过解析xml来做
2、一些事情了 2)处理 SAX2.0定义的核心处理接口一共有 org.xml.sax.ContentHandler org.xml.sax.ErrorHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver 这些接口是通过 org.xml.sax.XMLReader的setContentHandler(),setEroorHandler(), setDTDHandler(),setEntityHandler()注册到解析器,这里面最重要的是 org.xml.sax.ContentHandler接口,它具体如下 public interfa
3、ce ContentHandler public void setDocumentLocator(Locator locator);public void startDocument() throws SAXException;public void endDocument() throws SAXException;public void startPrefixMapping(String prefix,String uri) throws SAXException;public void endPrefixMapping(String prifix) public void startEl
4、ement(String namespaceURI,String localName, String qName,Attributes atts) throws SAXException;public void endElement(String namespaceURI,String localName, String qName) throws SAXException;public void characters(char ch,int start,int length) public void ignorableWhitespace(char ch,int start,int leng
5、th) public void processingInstruction(String target,String data) public void skippedEntity(String name) 通过setContentHandler()将你实现的ContentHandler注册给XMLReader之后, 在解析过程中,系统根据各种条件执行接口中的方法,下面简单说明一下 1)文档定位器 private Locator locator;public void setDocumentLocator(Locator locator) this.locator = locator;通常情况
6、下,你只要如此实现就可以了,这个主要是得到当前解析的位置, 通过得到的locator,你可以使用它的getLineNumber(),getColumnName()等 方法,可以得到文档当前的位置,但要注意的是,这个locator不能保存,只 针对当前的解析有效 2)文档的开头和结尾 public void startDocument() throws SAXException /解析过程中仅位于setDocumentLocator()方法后调用 public void endDocument() throws SAXException /解析过程中最后调用 大多数情况下你可以不用理他们,只要写
7、个空方法就可以了 3)名字空间的开始和结束 throws SAXExceptionthrows SAXException 4)元素的开始和结束 String qName,Attributes atts) throws SAXException String qName) throws SAXException 5)元素的数据 String s = new String(ch,start,length);这个是得到当前的元素的文本数据 6)可以忽略的空白 7)实体 8)指令处理 3)例子:这个是从Java & XML 中复制过来的, /* * Created on 2004-11-30 * *
8、TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package javaxml2;/* * author yuangfang * TODO To change the template for this generated type comment go to import java.io.*;import java.util.*;import org.xml.sax.*;import org.xml.
9、sax.ext.LexicalHandler;import org.xml.sax.helpers.XMLReaderFactory;import java.awt.*;import javax.swing.*;import javax.swing.tree.*;public class SAXTreeViewer extends JFrame private String vendorParserClass = private JTree jTree;DefaultTreeModel defaultTreeModel;public SAXTreeViewer() super(SAX Tree
10、 Viewer);setSize(600,450);public void init(String xmlURI) throws IOException,SAXException DefaultMutableTreeNode base = new DefaultMutableTreeNode(XML Document: + xmlURI);defaultTreeModel = new DefaultTreeModel(base);jTree = new JTree(defaultTreeModel);buildTree(defaultTreeModel,base,xmlURI);getCont
11、entPane().add(new JScrollPane(jTree),BorderLayout.CENTER);public void buildTree(DefaultTreeModel treeModel,DefaultMutableTreeNode base,String xmlURI)throws IOException,SAXException String featureURI = try XMLReader reader = XMLReaderFactory.createXMLReader(vendorParserClass);ContentHandler jTreeCont
12、entHandler = new JTreeContentHandler(treeModel,base);ErrorHandler jTreeErrorHandler = new JTreeErrorHandler();reader.setContentHandler(jTreeContentHandler);reader.setErrorHandler(jTreeErrorHandler);reader.setEntityResolver(new SimpleEntityResolver();featureURI = http:/xml.org/sax/features/validationreader.setFeature(featureURI,true);/xml.org/sax/features/nam
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1