線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1102
推到 Plurk!
推到 Facebook!

關於包成XML文件及Parse XML文件的問題?

尚未結案
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-14 23:51:42 IP:163.28.xxx.xxx 未訂閱
Q1:打包成XML檔    我的程式裡有3個Edit元件,如果我要把他包成XML文件之後,另外把它傳出去做其它處理,那把它包成XML檔的方法如下:  
 
Memo1->Lines->Append("<?xml version=\"1.0\" encoding=\"Big5\"?>");
Memo1->Lines->Append("");
Memo1->Lines->Append("" Edit1->Text "");
Memo1->Lines->Append("" Edit2->Text "");
Memo1->Lines->Append("" Edit3->Text "");
Memo1->Lines->Append("");
之後再轉存aaa.xml檔送出. 請問用這種包裝方式對嗎? 另外,包成XML文件之後還需不需要去寫一個驗證XML文件的程式? Q2: Parse XML檔. 我有多個XML檔,其XML文件的深度均不相同... 例如: <?xml version="1.0" encoding="Big5"?> Kevin 2002/1/3 12345 Cherry 2002/1/3 6438 Aloha 2002/1/3 235346 或 <?xml version="1.0" encoding="Big5"?> aaa bbb ccc 那目前我寫了一個 parse XML的程式,是利用兩個for迴圈去寫parser,如下:
  XMLDocument1->FileName="C:\\aaa.xml";
  if(XMLDocument1->Active==false)
    XMLDocument1->Active=true;
  _di_IXMLNode childInfo=XMLDocument1->DocumentElement;      if(childInfo->HasChildNodes)
  {
    _di_IXMLNodeList person=childInfo->ChildNodes;
    for(int i=0;iCount;i  )
    {
      _di_IXMLNodeList info=person->Nodes[i]->ChildNodes;
      for(int j=0;jCount;j  )
      {
        temStr="";
        temStr=temStr person->Nodes[j]->NodeName ":"  person->Nodes[j]->Text;
        MemoReceivedParseXML->Lines->Add(temStr);
        AnsiString tagName=person->Nodes[j]->NodeName;
        if (tagName=="aaa")  Edit4->Text=person->Nodes[j]->Text;
        if (tagName=="bbb")  Edit5->Text=person->Nodes[j]->Text;
        if (tagName=="ccc")  Edit6->Text=person->Nodes[j]->Text;
      }
    }
  }
 DeleteFile("C:\\aaa.xml");
 XMLDocument1->Active=false;
 
如果是針對不同深度的XML文件,那我該用什麼方式,去解出他每個(或某個)tag的內含值??該如何去改這個程式? Q3: XML裡面的dataType問題 如果我的XML文件裡面的tag "aaa"(電壓)的資料型態是個double,tag "bbb"(開/關)的資料型態是個boolean,tag "ccc" ...... 一般的做法要怎麼把他所代表的單位加入?同樣寫入XML檔嗎? ex: 3.3 <單位>電壓 如果是這樣,那如果parse出來後,他的資料型態string/int/double/boolean該如果去使用,怎麼知道它該用什麼樣的資料型態,是不是也要把資料型態寫入XML檔裡?? ================================================================= 問題很冗長,可能講的不是很清楚,但希望有能可解決我的問題..感激不盡.
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-15 00:09:19 IP:61.221.xxx.xxx 未訂閱
引言: Q1:打包成XML檔 我的程式裡有3個Edit元件,如果我要把他包成XML文件之後,另外把它傳出去做其它處理,那把它包成XML檔的方法如下:
 
Memo1->Lines->Append("<?xml version=\"1.0\" encoding=\"Big5\"?>");
Memo1->Lines->Append("");
Memo1->Lines->Append(""+Edit1->Text+"");
Memo1->Lines->Append(""+Edit2->Text+"");
Memo1->Lines->Append(""+Edit3->Text+"");
Memo1->Lines->Append("");
之後再轉存aaa.xml檔送出. 請問用這種包裝方式對嗎? 另外,包成XML文件之後還需不需要去寫一個驗證XML文件的程式? Q2: Parse XML檔. 我有多個XML檔,其XML文件的深度均不相同... 例如: <?xml version="1.0" encoding="Big5"?> Kevin 2002/1/3 12345 Cherry 2002/1/3 6438 Aloha 2002/1/3 235346 或 <?xml version="1.0" encoding="Big5"?> aaa bbb ccc 那目前我寫了一個 parse XML的程式,是利用兩個for迴圈去寫parser,如下:
  XMLDocument1->FileName="C:\\aaa.xml";
  if(XMLDocument1->Active==false)
    XMLDocument1->Active=true;
  _di_IXMLNode childInfo=XMLDocument1->DocumentElement;      if(childInfo->HasChildNodes)
  {
    _di_IXMLNodeList person=childInfo->ChildNodes;
    for(int i=0;iCount;i++)
    {
      _di_IXMLNodeList info=person->Nodes[i]->ChildNodes;
      for(int j=0;jCount;j++)
      {
        temStr="";
        temStr=temStr+person->Nodes[j]->NodeName+":" +person->Nodes[j]->Text;
        MemoReceivedParseXML->Lines->Add(temStr);
        AnsiString tagName=person->Nodes[j]->NodeName;
        if (tagName=="aaa")  Edit4->Text=person->Nodes[j]->Text;
        if (tagName=="bbb")  Edit5->Text=person->Nodes[j]->Text;
        if (tagName=="ccc")  Edit6->Text=person->Nodes[j]->Text;
      }
    }
  }
 DeleteFile("C:\\aaa.xml");
 XMLDocument1->Active=false;
 
如果是針對不同深度的XML文件,那我該用什麼方式,去解出他每個(或某個)tag的內含值??該如何去改這個程式? Q3: XML裡面的dataType問題 如果我的XML文件裡面的tag "aaa"(電壓)的資料型態是個double,tag "bbb"(開/關)的資料型態是個boolean,tag "ccc" ...... 一般的做法要怎麼把他所代表的單位加入?同樣寫入XML檔嗎? ex: 3.3 <單位>電壓 如果是這樣,那如果parse出來後,他的資料型態string/int/double/boolean該如果去使用,怎麼知道它該用什麼樣的資料型態,是不是也要把資料型態寫入XML檔裡?? ================================================================= 問題很冗長,可能講的不是很清楚,但希望有能可解決我的問題..感激不盡.
nlj859 你好: 請參考以下的連結文章 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/04/15 00:11:51
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-15 17:07:12 IP:163.28.xxx.xxx 未訂閱
如果要直接用 XMLDocument讀xml檔(XMLDocument->FileName="xxx.xml",且不用TreeView的方式,改用Memo列出所有tag內所有的text或是value,那程式該如何改? 另外,請問那個程式範例算是遞迴的方式嗎? 謝謝. 發表人 - nlj859 於 2004/04/15 20:53:02
系統時間:2024-07-09 1:59:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!