全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2239
推到 Plurk!
推到 Facebook!

使用TXMLDocument建立xml檔案存檔時是否可格式化成易讀類型?

答題得分者是:chris_shieh
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-03 16:03:53 IP:61.219.xxx.xxx 未訂閱
請問一下,我知道可以使用memXml.Lines.Text:=FormatXMLData(XMLDocument1.XML.Text) 將memo顯示出容易讀的XML類型也就是可以分行的而不是全部黏在一起的方式, 可是存檔的時候有辦法將其存成此種類型的格式嗎?也就是說 XMLDocument1.SaveToFile(...)的檔案用記事本開啟後會自動分行的格式    例如原先  
<?xml version="1.0" encoding="UTF-8"?>
CTSODA1TW2358818523588185RATTAN EXPRESS CO., LTD
......                      
變成此種格式
<?xml version="1.0" encoding="UTF-8" ?> 
- 
- 
  CTCOL 
  A 
  6TH FL.,5,SEC.2 AN HO RD., 
  TAIPEI TAIWAN R.O.C. 
  * 
  C.K.S. AIRPORT, TAIWAN 
  TAIWAN 
......
發表人 - darnell 於 2005/01/03 18:04:48
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-03 17:08:15 IP:210.65.xxx.xxx 未訂閱
Hi darnell,    那為何不直接用
procedure TForm1.Button2Click(Sender: TObject);
begin
  memXml.Lines.SaveToFile(YourFielName);
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-03 18:10:20 IP:61.219.xxx.xxx 未訂閱
謝謝,因為utf-8格式的問題, 如果使用memXml.Lines.SaveToFile(YourFielName); 方法存檔的話裡面的繁體字會亂掉    
引言: Hi darnell, 那為何不直接用
procedure TForm1.Button2Click(Sender: TObject);
begin
  memXml.Lines.SaveToFile(YourFielName);
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ---------------------------------- < face="Verdana, Arial, Helvetica"> ------------------------ 創造其實就是...... 轉個彎看世界......
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-05 12:15:58 IP:61.30.xxx.xxx 未訂閱
要讓XML 節點自動退縮 XMLDocument1.Options := [doNodeAutoIndent]; 存檔時會排列成階層的樣子 發表人 - chris_shieh 於 2005/01/05 12:21:09
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-06 11:19:00 IP:211.23.xxx.xxx 未訂閱
引言: 要讓XML 節點自動退縮 XMLDocument1.Options := [doNodeAutoIndent]; 存檔時會排列成階層的樣子 發表人 - chris_shieh 於 2005/01/05 12:21:09
感謝,我測試了一下發現XML有兩種使用法,IXML....,IDOC... 使用第一種做法的確可以利用[doNodeAutoIndent]排列整齊, 不過不幸的事我使用的是第二種方法好像還是無法排列 不知道 > 我的建立法如下: < class="code"> var myroot,mynode,mychild,attrInt:IDOMNode; mydoc:=XMLDocument1.DOMDocument; nodeMessageVersion:=nodeMessageHeader.appendChild(mydoc.createElement('MessageVersion')); nodeMessageVersion.appendChild(mydoc.createTextNode('A')); nodeDataTransferVersion:=nodeMessageHeader.appendChild(mydoc.createElement('DataTransferVersion')); nodeDataTransferVersion.appendChild(mydoc.createTextNode('1')); nodeFromRole:=nodeMessageHeader.appendChild(mydoc.createElement('FromRole')); AddNewNodeGroup_Role(mydoc,nodeFromRole); .....太多了所以我貼大致的使用法~ 不知道這樣有沒解決的方法? ------------------------ 創造其實就是...... 轉個彎看世界......
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-06 16:13:57 IP:61.30.xxx.xxx 未訂閱
1. 參考這裡 PrettyPrintDOM function http://groups.google.com.tw/groups?q=DOMDocument+indent&hl=zh-TW&lr=&selm=Xns93FFC88C3EBCBNINEBERRY%40NineBerry.de&rnum=4
procedure PrettyPrintDOM(DOM: DOMDocument);
  procedure TraverseNode(Node: IXMLDOMNode; Indent: string);
  const
    IndentLevel = '    ';
  var
    LineBreak: IXMLDOMNode;
    ChildNode, NextNode: IXMLDOMNode;
    AnyChildNode: Boolean;
  begin
    if Node = nil then
      Exit;        AnyChildNode:= False;
    ChildNode:= Node.Get_firstChild;
    while ChildNode <> nil do
    begin
      NextNode:= ChildNode.nextSibling;          if ChildNode.nodeType = NODE_ELEMENT then
      begin
        AnyChildNode:= True;            // Insert LineBreak before each child Node
        LineBreak:= DOM.createTextNode(#13#10 + 
          Indent + IndentLevel);
        Node.insertBefore(LineBreak, ChildNode);            TraverseNode(ChildNode, Indent + IndentLevel);
      end;          ChildNode:= NextNode;
    end;        if (Node.nodeType = NODE_ELEMENT) and AnyChildNode then
    begin
      // Add LineBreak after Node
      ChildNode:= NextNode;
      LineBreak:= DOM.createTextNode(#13#10 + Indent);
      Node.appendChild(LineBreak);
    end;
  end;
begin
  TraverseNode(DOM.documentElement, '');
end;
2.改用 SAX 中的 IXMWriter來編排格式 他有Indent 屬性 http://home.iprimus.com.au/kbwood/DelphiXML/BookCode/ http://delphi.ktop.com.tw/topic.php?topic_id=34755 @瞭解越多.懂得越少@ 發表人 - chris_shieh 於 2005/01/06 16:49:04
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-07 11:22:42 IP:211.20.xxx.xxx 未訂閱
感謝感謝真的可以了< >< > <>< face="Verdana, Arial, Helvetica">引言: 1. 參考這裡 PrettyPrintDOM function http://groups.google.com.tw/groups?q=DOMDocument+indent&hl=zh-TW&lr=&selm=Xns93FFC88C3EBCBNINEBERRY%40NineBerry.de&rnum=4 2.改用 SAX 中的 IXMWriter來編排格式 他有Indent 屬性 http://home.iprimus.com.au/kbwood/DelphiXML/BookCode/ http://delphi.ktop.com.tw/topic.php?topic_id=34755 發表人 - chris_shieh 於 2005/01/06 16:49:04 ------------------------ 創造其實就是...... 轉個彎看世界......
系統時間:2024-07-04 22:17:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!