在C++ Builder6中使用XML

最近在CSDN上经常看到有人询问如何在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();

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

添加一个节点元素:

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文件格式.

时间: 2025-01-31 02:04:51

在C++ Builder6中使用XML的相关文章

pom xml-maven项目中servlet.xml中出现 &amp;amp;quot;oscache:config&amp;amp;quot; is not bound.错误

问题描述 maven项目中servlet.xml中出现 "oscache:config" is not bound.错误 在pom.xml中加了依赖oscache的jar包.代码如下:com.opensymphonyoscache2.4.1 在servlet.xml中出现The prefix ""oscache"" for element ""oscache:config"" is not bound.错误

IE中的XML DOM

dom|xml 当微软在IE 5.0中第一次加入对XML支持时,他们只是在MSXML ActiveX库(最初是为了在IE 4.0中解析Active Channels的组件)中实现XML的功能.最初的版本并没有打算公开使用,然而随着开发人员逐渐了解这个组件并尝试使用时,微软才意识到这个库的重要性,很快就在IE 4.01中发布了MSXML完全升级版本.MSXML最初还只是IE的一个组件.直到2001年,微软发布了MSXML 3.0,这是一个通过其公司网站独立发布的产品.在2001年晚些时候,微软又发

在PHP中开发XML应用程序之基础篇

xml|程序 一. XML简介 XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互.数据的存储与使用. 使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构.XML数据是平台和应用程序独立的.不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途而被开发的).最近,宽带连接的增长及消费者对于越过任何媒体进行数据共享的应用软件的需求意味着,XML Web服务和应用软件正变得越来越丰富. XML的发明正是为了解

Java 中的 XML:使用 Castor 进行数据绑定

xml|数据 对于主要关心文档的数据内容的应用程序来说,Java 的 XML 数据绑定是 XML 文档模型的强大替代方案.在本文中,企业 Java 专家 Dennis Sosnoski 介绍了数据绑定并讨论了什么使它如此吸引人.然后他向读者展示了如何使用 Java 数据绑定的开放源代码 Castor 框架处理日益复杂的文档.如果您的应用程序关心 XML 的数据更甚于关心 XML 文档本身,您可能希望找出这个处理 Java 中 XML 的容易而又高效的方法.大多数处理应用程序中 XML 文档的方法

ADO.NET 中的 XML 特性

ado|xml 毫无疑问,XML 及其一些相关技术(包括 XPath.XSL Transformation 和 XML Schema)是 ADO.NET 的基础.与 ADO 相比,ADO.NET 对象模型的互操作性得到很大的提高,而事实上,XML 正是为此发挥重要作用的关键元素.在 ADO 中,XML 只是一个用于保留断开连接的记录集的内容的(非默认)I/O 格式.而 XML 在 ADO.NET 的构建和交互方面的参与则深入得多.可以用以下几点来概括 ADO.NET 与 XML 的更强的交互和集

Java 中的 XML:Java 文档模型的用法

xml 在本系列的第一篇文章中,我研究了一些用 Java 编写的主要的 XML 文档模型的性能.但是,在开始选择这种类型的技术时,性能只是问题的一部分.使用方便至少是同样重要的,并且它已是一个主要理由,来支持使用 Java 特定的模型,而不是与语言无关的 DOM . 为切实了解哪个模型真正的作用,您需要知道它们在可用性程度上是如何排名的.本文中,我将尝试进行这个工作,从样本代码开始,来演示如何在每个模型中编码公共类型的操作.并对结果进行总结来结束本文,而且提出了促使一种表示比另一种更容易使用的一

asp中读取xml以及Utf-8和Gb2312乱码问题

xml|问题 asp中创建xml对象通常使用:CreateObject("Microsoft.XMLDOM")读取节点:selectSingleNode("nodename")//nodename为节点名.读取属性:attributes.getNamedItem("attribute")//attribute为节点中所具有的属性名.加载xml: load(Server.MapPath("data.xml")) async 属性

在Excel2003中创建XML映射

excel|xml|创建 Microsoft Office Excel 2003 通过允许您将自己的 XML 架构定义 (XSD) 添加到工作薄,提高了对使用本机 XML 的支持.这样可以创建一个 XML 映射,用于在导入或导出数据时使数据变得更有意义.因此,您可以导入符合自定义 XML 词汇或架构的数据,然后使用相同的XML 架构将该数据写回去. 该功能面向 Office 解决方案开发人员,但专家用户也能够很好地使用它.该功能使您能够: • 在 Excel 电子表格和 XML 结构之间创建一个

HTML中的XML数据岛记录编辑与添加

xml|数据 <HTML>  <HEAD><Title>HTML中的数据岛中的记录集</Title></HEAD>  <body bkcolor=#EEEEEE text=blue bgcolor="#00FFFF">  <Table align=center width="100%"><TR><TD align="center">  &l