【聚杰网XML】基于事件解析的SAX模型分析
3. 通过接口ISAXXMLReader创建一个解析器。XMLReader是SAX应用实现的主要的接口,XMLReader的作用是这样的。首先,XML的开发人员使用这个接口来注册他们对其他SAX接口的实现(比如ContentHandler,DTDHandler,ErrorHandler等等),另外,XMLREADER通过setFeature和setProperty两个方法来配置SAX解析器的行为,最后,XMLReader封装了解析的功能。示例代码如下:
ISAXXMLReader* pRdr = NULL;
HRESULT hr = CoCreateInstance(
__uuidof(SAXXMLReader),
NULL,
CLSCTX_ALL,
__uuidof(ISAXXMLReader),
(void **)&pRdr);
4. 创建相应的事件(handler)处理类,这里不妨假设我们只处理和文档内容相关的事件。示例代码如下:
CXMLContentDeal * pMc = new CXMLContentDeal();
注意这里CXMLContentDeal是继承接口ISAXContentHandler的类。
5.在解析器中注册事件处理类,示例代码如下:
hr = pRdr->putContentHandler(pMc);
6.开始进行文档的解析,示例代码如下
hr = pRdr->parseURL(URL); file://这里的URL是指一个具体XML文档的位置
7.释放解析器对象
pRdr->Release();
以上就是基于SAX的应用程序的框架结构,我们可以看到,实际的事件处理是在我们的继承类CXMLContentDeal中实现的,在我们这个示例代码中,每当文档中一个新的元素开始的时候,都会激活方法startElement,每当一个元素结束的时候,都会激活方法endElement。我们可以在startElement和endElement中写入和应用相关的特定的代码。
1 2




