Xerces-C心得 |
小工头 发表于 2005/3/7 21:13:51 | 今天对Xerces-C的学习有了突破,恭喜自己一下。俺一开始下载的Xerces-C是已经编译好的windows版本,sample很少,很多接口的调用方法都没有实际例子。网上的文章和示例程序多数是基于java的,俺没法直接用,更何况网上的例子也比较少。所以,俺只好一边看一边猜,进度因此被大大拖延了。今天无意中下到了xml4c的示例。xml4c是IBM在Xerces-C基础上自行开发的XML解析器,两者的接口几乎完全一致,只是xml4c支持的字符集更广泛,而Xerces-C只支持很少几种,尤其不支持中文,在中国基本没法用。xml4c的例子比Xerces-C详尽得多,到底是商业软件,技术支持做得就是好。通过对xml4c的示例代码的学习,俺终于解决了长久以来困扰俺的几个难题。俺准备做的是实现对文件形式的XML文档进行查找和替换的功能。具体思路是首先把XML文档解析成DOM树(将来有时间的话,可以考虑SAX),遍历DOM树进行查找和替换,再把修改后的DOM变成XML文档的形式输出。前面两步都可以参考Xerces-C的示例程序完成,但是最后一步没有参考。俺通过头文件的名称猜到了需要使用DOMWriter,但是一直不知道正确的调用方法,结果被卡住了N长时间。有了xml4c的示例程序之后,俺的难题终于解决了。下面介绍一下核心代码。 //initialize try{ XMLPlatformUtils::Initialize(); }
catch(const XMLException& toCatch){ char *pMsg = XMLString::transcode(toCatch.getMessage()); cerr << "Error during Xerces-c Initialization.\n" << "Exception Message:" << pMsg; XMLString::release(&pMsg); return -1; }这是初始化操作,必须置于所有基于Xerces-C的调用之前。
//start create DOM Document DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(X("core"));
pSerializer = ( (DOMImplementationLS*)impl )->createDOMWriter(); pTarget = new StdOutFormatTarget(); // set user specified end of line sequence and output encoding XStr temp("\n"); pSerializer->setNewLine( temp.UnicodeForm() );
这是创建XMLDocument对象及相关对象的操作。DOMImplementationRegistry::getDOMImplementation()似乎是注册什么东西,参数可以有什么样的变化还没搞清楚;pSerializer指向的就是输出用到的DOMWriter对象。pTarget指向的是用于输出到stdout(屏幕)的对象。(这是xml4c例子里面的,随手抄上了,见谅)
DOMBuilder *parser = (DOMBuilder *)((DOMImplementationLS *)impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS,0));
创建用于解析成DOM树的解析器对象,参数含义不明,也是照抄。
DOMCountErrorHandler errorHandler; parser->setErrorHandler(&errorHandler);
创建解析器使用的错误处理对象。
try{ parser->resetDocumentPool(); doc = parser->parseURI(sXMLFile); }
解析XML文档。后面要跟上错误处理程序。sXMLFile是已经读入到内存的XML文档。
XMLCh *out = pSerializer->writeToString(*doc); char *tttt = XMLString::transcode(out); printf("%s\n",tttt);
把DOM树的内容变成XML文档,写到字符串中去,然后就可以存成文件了。
delete pTarget; delete pSerializer; parser->release(); XMLPlatformUtils::Terminate();
操作结束之后的释放内存工作。目前还不确定out和tttt是否需要释放内存。查找和替换的核心代码在新的blog里面描述。今天的blog有点长了。
|
|
回复:Xerces-C心得 |
小工头发表评论于2005/7/1 10:01:16 | 这个……俺记不得了……
不过可以下载Xerces-C的源代码,其中的src目录有很多例子代码。
|
|
回复:Xerces-C心得 |
munn(游客)发表评论于2005/6/30 22:11:53 | 能否告知哪有下xml4c示例的吗?谢谢
|
|
» 1 »
|

.: 公告
有人的地方就有恩怨 有恩怨的地方就是江湖 人在江湖漂,谁能不挨刀 |
|
« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
.: 我的分类(专题)
|

.: 最新日志
.: 最新回复
|

blog名称:少年包工头的工作日记 日志总数:629 评论数量:1458 留言数量:56 访问次数:8982141 建立时间:2004年12月8日 |
|

.: 留言板
|

.: 链接
|

|