专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C 教程 » 使用xml模式:在C++ Builder6中使用XML »正文

使用xml模式:在C++ Builder6中使用XML

来源: 发布时间:星期三, 2008年9月24日 浏览:86次 评论:0

最近经常看到有人询问如何在c++ builer中使用xml,开始作者也认为莫名其妙,首先xml技术似乎经常与网络联系起来,或者soap/web service,其次c++ builer提供了txmldocument组件,应该会很容易使用。这几天作者在研究tomcat,发现它的配置文件是用xml文件编写的,似乎这代表了软件的先进型:),于是我也决定用c++ builer来操作xml文件来增加自己软件的专业感。至此我才深切感受到那些询问者的困惑,txmldocument组件真的好难用,要不是有过asp+xml建设网站的经历,真得要被这个问题难倒了:),废话少说,转入正题。

处理xml文件当然需要xml parser,而xml parse有包括sax,dom两种类型,sax相对比较简单,dom模型使用则比较困难,而且c++ builer又是使用dom模型来处理xml文件的,所以这里主要讨论dom模型的处理方法。

txmldocument组件使用了ms xml dom模型来处理xml的,msxmldom是基于com的,在vb这样的工具中使用这个com会很容易,而在c++ builer中之所以不容易,我想很大程度上是因为我们先入为主的思维,vcl的类设计的非常容易理解和使用,很多方法见名知意,甚至连帮助都不需要查,而作者在使用txmldocument的时候就不得不查帮助了,很多方法都不能准确知道它的意思,甚至还有陷阱。

下面我以一个简单的例子来告诉大家怎样使用txmldocument来处理xml,这个例子是这样的,作者需要一个定时提醒日程安排的的小程序,假设其他的功能都以设计完毕,现在面临的问题是如何保存我们日程安排,这里为了使用xml,所以当然使用xml文件格式来存储。对于一个日程安排程序,肯定需要有添加删除的功能,基本上上面的操作已经包含处理xml的全部。

我们这样来设计xml文件(tip.xml):
<?xml version=\"1.0\" encoding=\"gb2312\"?> //注意这里的编码格式为gb2312,否则有乱码
<vtip>
<tip>
<mode>0</mode>
<time>2003/4/25?08:01:46</time>
<content>洗衣服</content>
</tip>
<tip>
<mode>1</mode>
<time>2003/4/25?pm 17:30:00</time>
<content>陪女朋友吃饭</content>
</tip>
</vtip>
上面的xml文件是比较规矩的格式,没有包括属性和doctype等这样的东西,不过有了下面的知识,你应该很容易处理复杂的格式。

首先是打开xml,现面的代码片断显示了这一过程:
xmldoc->loadfromfile(widestring(pathstring(apppath)+\"tip.xml\"));
//xmldoc是txmldocument的名字
xmldoc->active=true;
filllist(); //把xml的内容添加到listview

然后就是如何读取xml的内容(filllist):

lstmain->items->beginupdate();
lstmain->items->clear();
_di_ixmlnode node=xmldoc->documentelement;
//documentelement属性用来得到根节点
_di_ixmlnodelist nodes=node->childnodes;
//得到子节点list
for(int n=0;n<nodes->count;n++)
{
tlistitem* li=lstmain->items->add();
node=nodes->nodes[n]->childnodes->nodes[0];
//得到子节点的子节点,也也就是 vtip//tip//mode
int m=string(node->gettext()).toint();
//得到对应节点的text内容并转换到int
li->caption=\"\";
li->imageindex=m+5;
li->subitems->add(nodes->nodes[n]->childnodes->nodes[1]->gettext());
li->subitems->add(nodes->nodes[n]->childnodes->nodes[2]->gettext());
//代码同上
}
lstmain->items->endupdate();
经过上面的代码,我们看到类似于下图的结果:

\"\" lstmain->items->delete(ind);

上面的代码演示了如何处理一个xml文件,读者可以自己看看帮助,就可以知道处理更复杂的xml文件格式.

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: