在C++ Builder6中使用XML
给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的在C++ Builder6中使用XML,过去的都会过去,迎接崭新的开始,释放更美好的自己。
?xml version="1.0" encoding="GB2312"? //注重这里的编码格式为GB2312,否则有乱码
VTip
Tip
Mode0/Mode
Time2003/4/25?08:01:46/Time
Content洗衣服/Content
/Tip
Tip
Mode1/Mode
Time2003/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;nnodes-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文件格式.