XML 初级教程(二) 作者:我本楚狂人
下载源代码一、SAX架构 SAX包含多个Handler处理器,其中有诸多函数以处理XML资源的时侯处理事件。 其中ContentHandler是最重要的,它用来对XML文档进行解析,DTDHandler则对DTD文件进行验证。 当前MSXML3包含以下处理器:
IMXAttributes InterfaceIMXWriter InterfaceISAXAttributes Interface ISAXContentHandler InterfaceISAXDeclHandler Interface ISAXDTDHandler InterfaceISAXEntityResolver InterfaceISAXErrorHandler InterfaceISAXLexicalHandler InterfaceISAXLocator InterfaceISAXXMLFilter InterfaceISAXXMLReader Interface 二、ISAXContentHandler接口 ContentHandler拥有以下函数: charactersendDocumentstartDocumentendElementstartElementignorableWhitespacestartPrefixMappingprocessingInstructionskippedEntity 今天要讲解的函数是characters,startDocument/endDoucment,startElement/endElement函数,它们的用途如图所示: 三、函数讲解 HRESULT characters( [in] const wchar_t * pwchChars, [in] int cchChars); pwchChars获取字符串信息。 cchChars获取该字符串长度。 HRESULT startDocument(); 该函数表明开始解析文档。 HRESULT startElement( [in] const wchar_t * pwchNamespaceUri, [in] int cchNamespaceUri, [in] const wchar_t * pwchLocalName, [in] int cchLocalName [in] const wchar_t * [in] int cchQName); [in] ISAXAttributes * pAttributes); pwchNamespaceUri获取命名空间URI。 cchNamespaceUri获取URI的长度。 pwchLocalName获取标记。 cchLocalName获取标记长度。 pwchQName获取QName。 cchQName获取QName长度。 pAttributes获取元素属性信息。 由于元素属性并不固定,需要用如下方法获取。 pAttributes->getLength(&l); for ( int i=0; i<l; i++ ) { wchar_t * ln, * vl; int lnl, vll; pAttributes->getLocalName(i,&ln,&lnl); prt(L" %s=", ln, lnl); pAttributes->getValue(i,&vl,&vll); prt(L"\"%s\"", vl, vll); } 四、 使用ContentHandler: HERO_XMLContentHandler* pHero_XML; ISAXXMLReaderPtr pReader = NULL; HRESULT hr; CHR(pReader.CreateInstance(__uuidof(SAXXMLReader))); //Only one content handler can be registered at a time. pHero_XML=HERO_XMLContentHandler::CreateInstance(); //生成HERO_XMLContentHandler对象。 CHR(pReader->putContentHandler(pHero_XML)); //注册HERO_XMLContentHandler处理器。 CHR(pReader->parseURL(L"hero.xml"));//解析路径。 CHR(pReader->putContentHandler(NULL)); 程序运行图。 五、后记 希望本文能给大家帮助,欢迎大家批评指正,具体请看源代码。使用开发包为MSXML3,当然用Apache Xerces原理也是一样的。转载于:https://www.cnblogs.com/wzwind/archive/2008/10/13/1310091.html
相关资源:TinyXML入门教程