Delphi操作XML(六)


Delphi操作XML(六)

引自百度
     
使用NativeXml的例子
3.1.例子A:XML的裝載、存儲和導出
  這個例子顯示如何加載一個XML文檔,然后以可讀格式導出到一個TMemo領域。
  拖放一個TEditEdit1),TButtonButton1)和一個TMemo到你的窗體,然后連接到下面的按鈕的OnClick事件代碼。填寫文件名到Edit1,然后按一下按鈕,您會看到在memo控件中列出XML文件的內容。
procedure TForm1.Button1Click(Sender: TObject);
var
  ADoc: TNativeXml;
begin
  Memo1.Lines.Clear;
  ADoc := TNativeXml.Create;
  try
    ADoc.LoadFromFile(Edit1.Text);
    ADoc.XmlFormat := xfReadable;
    Memo1.Lines.Text := ADoc.WriteToString;
  finally
    ADoc.Free;
  end;
end;
  注意,ADoc.XmlFormat= xfReadable將確保該文件是以易讀的形式列出(以回車符和縮進)。

3.2.例子B:連接到節點
  這個例子顯示了如何訪問在XML文件中的各個節點。一個節點可以從一個普通的XML標記、注釋、CDATA結構,等等東西。該示例演示如何使用一個簡單的雙循環列出前2層的節點。
  添加TeditTButtonTMemo到窗體,然后將下面的事件代碼連接到按鈕的OnClick。然后在Edit1中填寫文件名,按一下按鈕,前兩層的節點將會在memo控件中列出。
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: integer;
  ADoc: TNativeXml;
begin
  Memo1.Lines.Clear;
  ADoc := TNativeXml.Create;
  try
    ADoc.LoadFromFile(Edit1.Text);
    if assigned(ADoc.Root) then with ADoc.Root do
      for i := 0 to NodeCount - 1 do begin
        Memo1.Lines.Add(Nodes[i].Name);
        for j := 0 to Nodes[i].NodeCount - 1
do
          Memo1.Lines.Add(' ' +
Nodes[i].Nodes[j].Name);
      end;
  finally
    ADoc.Free;
  end;
end;
3.3.例子C:事件驅動處理
  這個例子說明了NativeXml可以用一個SAX-like的方式,按順序讀文件,每當一個節點初始化和加載時產生事件。
  添加一個TButtonButton3)和一個TMemoMemo1)到您的窗體,然后將NativeXml包括在uses中。接下來,鍵入下面的TButton.OnClick事件處理程序代碼。
procedure TForm1.Button3Click(Sender: TObject);
var
  ADoc: TNativeXml;
begin
  Memo1.Lines.Clear;
  ADoc := TNativeXml.Create;
  try
    ADoc.OnNodeNew    := DoNodeNew;
    ADoc.OnNodeLoaded := DoNodeLoaded;
    ADoc.LoadFromFile(Edit1.Text);
  finally
    ADoc.Free;
  end;
end;
  鍵入下面的程序代碼在新的TForm1中:
function TForm1.Indent(ACount: integer): string;
begin
  while ACount > 0 do begin
    Result := Result + '  ';
    dec(ACount);
  end;
end;

procedure TForm1.DoNodeNew(Sender: TObject; Node:TXmlNode);
begin
  Memo1.Lines.Add(Format('New : %sName=%s', [Indent(Node.TreeDepth),Node.Name]));
end;

procedure TForm1.DoNodeLoaded(Sender: TObject; Node:TXmlNode);
begin
  Memo1.Lines.Add(Format('Loaded: %sName=%s, Value=%s',[Indent(Node.TreeDepth), Node.Name, Node.ValueAsString]));
end;
  當一個節點被找到,OnNodeNew事件被觸發,每當一個節點完全裝載,OnNodeLoaded事件被觸發。
 如果您不希望保留在內存中的XML文件的完整副本,例如,對大型XML文件,你可以直接刪除該節點,釋放其內存。在這種情況下,添加以下代碼到OnNodeLoaded事件:
procedure TForm1.DoNodeLoaded(Sender: TObject; Node: TXmlNode);
begin
  Memo1.Lines.Add(Format('Loaded: Name=%s, Value=%s', [Node.Name,Node.ValueAsString]));
  if Node.TreeDepth > 0 then begin
    Memo1.Lines.Add(Format('Deleted: Name=%s', [Node.Name]));
    Node.Delete;
  end;
end;
3.4.例子D:創建一個簡單的XML文件
  這個例子演示如何創建一個簡單的XML文件,在根節點下的一個節點,有一個屬性和子節點。我們將嘗試創建這個XML文件:
<?xml version="1.0" encoding="windows-1252"?>
<Root>
  <Customer ID="123456">
    <Name>John Doe</Name>
  </Customer>
</Root>
  下面是一個過程的代碼,創建此文件,並以易讀格式保存到一個文件名為“C:\test.xml”的文件:
procedure CreateXML;
var
  ADoc: TNativeXml;
begin
  // Create new document with a rootnode called "Root"
  ADoc := TNativeXml.CreateName('Root');
  try
    // Add a subnode with name "Customer"
    with ADoc.Root.NodeNew('Customer') do begin
      // Add an attribute to this subnode
      WriteAttributeInteger('ID', 123456);
      // Add subsubnode
      WriteString('Name', 'John Doe');
    end;

    // Save the XML in readable
format (so with indents)
    ADoc.XmlFormat := xfReadable;
    // Save results to a file
    ADoc.SaveToFile('c:\test.xml');
  finally
    ADoc.Free;
  end;
end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM