选择显示字体大小

在c++ builder6中使用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();



经过上面的代码,我们看到类似于下图的结果:

添加一个节点元素:

bool __fastcall tfrmmain::addtask(int m,

tdatetime& date,

tdatetime& time,

string con)

{

//todo: add your source code here

_di_ixmlnode node=xmldoc->documentelement;

node=node->addchild(widestring("tip"));

_di_ixmlnode subnode=node->addchild(widestring("mode"));

subnode->settext(widestring(m));

subnode=node->addchild(widestring("time"));

subnode->settext(widestring(date.datestring()+"?"+time.timestring()));

subnode=node->addchild(widestring("content"));

subnode->settext(widestring(con));

return true;

} //以上代码很容易理解,读的时候可以对照xml文件的格式

最后是删除:



int ind=lstmain->selected->index;

//ind为要删除的节点号

_di_ixmlnode node=xmldoc->documentelement;

int re=node->childnodes->delete(ind);

if (re!=-1)

lstmain->items->delete(ind);

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

(责任编辑:铭铭)


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons