国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

在C++ Builder6中使用XML

2019-11-17 05:22:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
最近經(jīng)常看到有人詢問(wèn)如何在C++ Builer中使用xml,開(kāi)始作者也認(rèn)為莫名其妙,首先XML技術(shù)似乎經(jīng)常與網(wǎng)絡(luò)聯(lián)系起來(lái),或者SOAP/WEB Service,其次C++ Builer提供了TXMLDocument組件,應(yīng)該會(huì)很輕易使用。這幾天作者在研究TOMCAT,發(fā)現(xiàn)它的配置文件是用XML文件編寫(xiě)的,似乎這代表了軟件的先進(jìn)型:),于是我也決定用C++ Builer來(lái)操作XML文件來(lái)增加自己軟件的專業(yè)感。至此我才深切感受到那些詢問(wèn)者的困惑,TXMLDocument組件真的好難用,要不是有過(guò)asp+XML建設(shè)網(wǎng)站的經(jīng)歷,真得要被這個(gè)問(wèn)題難倒了:),廢話少說(shuō),轉(zhuǎn)入正題。處理XML文件當(dāng)然需要XML Parser,而XML Parse有包括SAX,DOM兩種類型,SAX相對(duì)比較簡(jiǎn)單,DOM模型使用則比較困難,而且C++ Builer又是使用DOM模型來(lái)處理XML文件的,所以這里主要討論DOM模型的處理方法。TXMLDocument組件使用了MS XML DOM模型來(lái)處理XML的,MSXMLDOM是基于COM的,在VB這樣的工具中使用這個(gè)COM會(huì)很輕易,而在C++ Builer中之所以不輕易,我想很大程度上是因?yàn)槲覀兿热霝橹鞯乃季S,VCL的類設(shè)計(jì)的非常輕易理解和使用,很多方法見(jiàn)名知意,甚至連幫助都不需要查,而作者在使用TXMLDocument的時(shí)候就不得不查幫助了,很多方法都不能準(zhǔn)確知道它的意思,甚至還有陷阱。下面我以一個(gè)簡(jiǎn)單的例子來(lái)告訴大家怎樣使用TXMLDocument來(lái)處理XML,這個(gè)例子是這樣的,作者需要一個(gè)定時(shí)提醒日程安排的的小程序,假設(shè)其他的功能都以設(shè)計(jì)完畢,現(xiàn)在面臨的問(wèn)題是如何保存我們?nèi)粘贪才?這里為了使用XML,所以當(dāng)然使用XML文件格式來(lái)存儲(chǔ)。對(duì)于一個(gè)日程安排程序,肯定需要有添加刪除的功能,基本上上面的操作已經(jīng)包含處理XML的全部。我們這樣來(lái)設(shè)計(jì)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文件是比較規(guī)矩的格式,沒(méi)有包括屬性和DOCTYPE等這樣的東西,不過(guò)有了下面的知識(shí),你應(yīng)該很輕易處理復(fù)雜的格式。首先是打開(kāi)XML,現(xiàn)面的代碼片斷顯示了這一過(guò)程:
  XMLDoc->LoadFromFile(WideString(PathString(AppPath)+"Tip.xml"));
  //XMLDoc是TXMLDocument的名字
  XMLDoc->Active=true;
  FillList(); //把XML的內(nèi)容添加到ListView然后就是如何讀取XML的內(nèi)容(FillList):  lstMain->Items->BeginUpdate();
  lstMain->Items->Clear();
  _di_IXMLNode node=XMLDoc->DocumentElement;
  //DocumentElement屬性用來(lái)得到根節(jié)點(diǎn)
  _di_IXMLNodeList nodes=node->ChildNodes;
  //得到子節(jié)點(diǎn)List
  for(int n=0;n<nodes->Count;n++)
  {
    TListItem* li=lstMain->Items->Add();
    node=nodes->Nodes[n]->ChildNodes->Nodes[0];
    //得到子節(jié)點(diǎn)的子節(jié)點(diǎn),也也就是 VTip//Tip//Mode
    int m=String(node->GetText()).ToInt();
    //得到對(duì)應(yīng)節(jié)點(diǎn)的Text內(nèi)容并轉(zhuǎn)換到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();
經(jīng)過(guò)上面的代碼,我們看到類似于下圖的結(jié)果:
在C++ Builder6中使用XML添加一個(gè)節(jié)點(diǎn)元素:
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;
} //以上代碼很輕易理解,讀的時(shí)候可以對(duì)照XML文件的格式最后是刪除:
  int ind=lstMain->Selected->Index;
  //ind為要?jiǎng)h除的節(jié)點(diǎn)號(hào)
  _di_IXMLNode node=XMLDoc->DocumentElement;
  int re=node->ChildNodes->Delete(ind);
  if (re!=-1)
    lstMain->Items->Delete(ind);上面的代碼演示了如何處理一個(gè)XML文件,讀者可以自己看看幫助,就可以知道處理更復(fù)雜的XML文件格式.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 綦江县| 吉首市| 墨竹工卡县| 兴国县| 济南市| 平舆县| 江口县| 阜城县| 汤原县| 安康市| 松潘县| 怀远县| 治多县| 永新县| 海伦市| 朝阳县| 泸定县| 革吉县| 股票| 洪湖市| 桑日县| 克什克腾旗| 灵丘县| 离岛区| 衡山县| 图们市| 淮阳县| 兴山县| 旬邑县| 安溪县| 绥阳县| 平塘县| 依兰县| 绿春县| 射阳县| 固原市| 禄丰县| 鄂尔多斯市| 香港 | 霍林郭勒市| 涿鹿县|