W3CHINA Blog首页    管理页面    写新日志    退出

Blue blue sky

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有点长了。

阅读全文(10101) | 回复(2) | 编辑 | 精华

 


回复:Xerces-C心得
小工头发表评论于2005/7/1 10:01:16

这个……俺记不得了…… 不过可以下载Xerces-C的源代码,其中的src目录有很多例子代码。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

 


回复:Xerces-C心得
munn(游客)发表评论于2005/6/30 22:11:53

能否告知哪有下xml4c示例的吗?谢谢

 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



This is home

.: 公告

有人的地方就有恩怨

有恩怨的地方就是江湖

人在江湖漂,谁能不挨刀


Bloginess

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930

.: 我的分类(专题)

首页(629)
杂项(69)
我喜欢过的声音(35)
耳机评测(18)
七天乐(127)
工作八卦(174)


In the Bowl

.: 最新日志

变化:俺的2012
迟来的总结,俺的2011
暂停更新:娶了媳妇不上网
一次坦诚的大会
妹子,妹子!
领导满月
当了领导能怎样
俺的播放列表
俺的重构总结
开会的故事

.: 最新回复

回复:迟来的总结,俺的2011
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:小学生作文之记一次拔河比赛
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:一次坦诚的大会
回复:一次坦诚的大会
回复:一次坦诚的大会


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



Text Me

.: 留言板

签写新留言

你太客气了
工作是为了更好的生活。。。
飘过!
初烧耳机
路过留声
自动浇花
节日快乐
向您请教
HAHA
咨询下呵呵


Other Fish in the Sea

.: 链接



Lake JJ

真!鱼家MM

传说中的99

王小四的自留地

挣扎中的职场新人tintin同学




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.078 second(s), page refreshed 144797931 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号