[ 来源:www.it55.com | 作者: | 时间:2007-07-14 | 收藏 | 推荐 ] 【大 中 小】
SAX2解析器读XML文档,然后产生基于特殊符号的事件。SAX2解析器实际上并不为该文档在内存中创建一棵树结构,它序列的处理一个文档的内容并产生相关的事件。
it55.com
比如,当你进行基于事件的编程的时候,你可以创建函数来响应用户定义的事件(比如OnClick事件)。在利用SAX进行编程的时候,需要注意的是,是解析器而不是用户产生事件。
比如考虑下面一个简单的文档。
<?xml version="1.0"?>
<parts>
<part>TurboWidget</part>
</parts>
当SAX2在处理这个文档的时候,它产生如下的一系列的事件:
StartDocument( )
StartElement( "parts" )
StartElement( "part" )
Characters( "TurboWidget" )
EndElement( "part" )
EndElement( "parts" )
EndDocument( )
可以把SAX2看成是一个有拉特点(PUSH)的解析器,SAX2产生事件,然后你可以自己去处理些事件。实际上,当SAX2在解析一个文档的时候,SAXXMLReader读该文档并产生一系列的事件,你可以选择一些事件进行处理。
免费资源www.it55.com
创建一个应用SAX的应用程序框架
SAX2产生的事件包括如下的种类:
¨ 和XML文档内容相关的事件(ISAXContentHandler)
¨ 和DTD相关的事件(ISAXDTDHandler)
¨ 出现错误时发生的事件(ISAXErrorHandler)
为了处理这些事件,你需要实现一个相关的处理类,该处理类需要包含一些方法来处理相关的事件。你必须对你想要处理的事件实现相关的处理。如果你不想处理某一个事件的话,只需要简单的忽略它就可以。在实际应用中,我们首先要继承这些接口,用C++我们可以创建一个类,在这个类的方法中,我们可以告诉应用程序在接收到一个事件的时候如何进行处理。下面是建立一个基于SAX的应用的基本步骤:
1. 创建头文件当使用SAX2的时候,我们需要用到动态连接库MSXML.DLL,为了使用MSXML中包含的SAX2接口,你必须在程序的头文件(一般在stdafx.h中)中包含下列的代码:
class CXMLContentDeal : public ISAXContentHandler
{
public:
CXMLContentDeal();
virtual CXMLContentDeal ();
virtual HRESULT STDMETHODCALLTYPE startElement(
/* [in] */ wchar_t __RPC_FAR *pwchNamespaceUri,
/* [in] */ int cchNamespaceUri,
/* [in] */ wchar_t __RPC_FAR *pwchLocalName,
/* [in] */ int cchLocalName,
/* [in] */ wchar_t __RPC_FAR *pwchRawName,
/* [in] */ int cchRawName,
/* [in] */ ISAXAttributes __RPC_FAR *pAttributes);
virtual HRESULT STDMETHODCALLTYPE endElement(
/* [in] */ wchar_t __RPC_FAR *pwchNamespaceUri,
/* [in] */ int cchNamespaceUri,
/* [in] */ wchar_t __RPC_FAR *pwchLocalName,
/* [in] */ int cchLocalName,
/* [in] */ wchar_t __RPC_FAR *pwchRawName,
/* [in] */ int cchRawName);
}
(编辑:IT资讯之家 www.it55.com)