使用TXMLDocument建立xml檔案存檔時是否可格式化成易讀類型? |
答題得分者是:chris_shieh
|
darnell
版主 ![]() ![]() ![]() ![]() 發表:25 回覆:103 積分:145 註冊:2003-03-04 發送簡訊給我 |
請問一下,我知道可以使用memXml.Lines.Text:=FormatXMLData(XMLDocument1.XML.Text)
將memo顯示出容易讀的XML類型也就是可以分行的而不是全部黏在一起的方式,
可是存檔的時候有辦法將其存成此種類型的格式嗎?也就是說
XMLDocument1.SaveToFile(...)的檔案用記事本開啟後會自動分行的格式 例如原先
<?xml version="1.0" encoding="UTF-8"?>變成此種格式 <?xml version="1.0" encoding="UTF-8" ?> -發表人 - darnell 於 2005/01/03 18:04:48 |
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
darnell
版主 ![]() ![]() ![]() ![]() 發表:25 回覆:103 積分:145 註冊:2003-03-04 發送簡訊給我 |
謝謝,因為utf-8格式的問題,
如果使用memXml.Lines.SaveToFile(YourFielName);
方法存檔的話裡面的繁體字會亂掉
引言: Hi darnell, 那為何不直接用procedure TForm1.Button2Click(Sender: TObject); begin memXml.Lines.SaveToFile(YourFielName); end; |
chris_shieh
高階會員 ![]() ![]() ![]() ![]() 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
darnell
版主 ![]() ![]() ![]() ![]() 發表:25 回覆:103 積分:145 註冊:2003-03-04 發送簡訊給我 |
引言: 要讓XML 節點自動退縮 XMLDocument1.Options := [doNodeAutoIndent]; 存檔時會排列成階層的樣子 發表人 - chris_shieh 於 2005/01/05 12:21:09感謝,我測試了一下發現XML有兩種使用法,IXML....,IDOC... 使用第一種做法的確可以利用[doNodeAutoIndent]排列整齊, 不過不幸的事 |
chris_shieh
高階會員 ![]() ![]() ![]() ![]() 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
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 發送簡訊給我 |
感謝感謝真的可以了< >< >
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |