zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    电信送的路由猫外接无线路由器的设置方法
    程序不包含适合于入口点的静态“Main”方法
    (C#) GDAL使用过程中遇见问题1
    Winform 自定义控件
    先来个Label吧
    SPY++第一步,设计界面
    C# 屏蔽Ctrl Alt Del 快捷键方法+屏蔽所有输入
    Spy++第二步,编写眼睛图标的事件
    GDB调试 linux
    makefile文件的语法规则和配置 linux
  • 原文地址:https://www.cnblogs.com/acuier/p/2352230.html
Copyright © 2011-2022 走看看