zoukankan      html  css  js  c++  java
  • Delphi操作XML(一)

    原来自己是个一个菜鸟。

    Delphi操作XMl,只要使用 NativeXml。我是用的版本是4.02。NativeXML的使用方法比较简单,但是功能很强大。

    XE2的话,要在simdesign.inc后面加上:

                 // Delphi XE2 / 16
                {$ifdef VER230}
                {$define D7UP}
                {$define D10UP}
                {$define D15UP}
                {$endif}

    一、使用     

          1) Copy the NativeXml files from the NativeXml directory into your project folder. Copy additional
              files in the General directory to your project folder or some appropriate general folder you want.

          2) Include the clause "uses NativeXml" in your unit.

              If you want to use NativeXml in all your projects, you can also add the NativeXml folder to your library path.

      最简单的方法是将General 下的 文件和 nativexml 下的 文件复制到一个目录下,然后加入到 library路径,这样以后用到就不用拷来拷去了。

      在(实现)部分   uses NativeXml; //必须的。

      以下代码选自万一的博客 :

    uses NativeXml; //!

    const xmlFile = 'C:\Temp\xml_test_files\basic.xml'; //测试文件

    {原样打开}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Memo1.Lines.LoadFromFile(xmlFile);
    end;

    {使用 NativeXml 打开}
    procedure TForm1.Button1Click(Sender: TObject); var
      xml: TNativeXml;
    begin
      xml := TNativeXml.Create(nil);
      xml.LoadFromFile(xmlFile);
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;

    {使用缩进}
    procedure TForm1.Button2Click(Sender: TObject);
    var
      xml: TNativeXml;
    begin
      xml := TNativeXml.Create(nil);
      xml.LoadFromFile(xmlFile);
      xml.XmlFormat := xfReadable; //格式枚举:xfCompact(压缩)、xfReadable(缩进)、xfPreserve(好像暂未处理)
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;

    {指定缩进文本}
    procedure TForm1.Button3Click(Sender: TObject);
    var
      xml: TNativeXml;
    begin
      xml := TNativeXml.Create(nil);
      xml.LoadFromFile(xmlFile);
      xml.IndentString := '    '; //IndentString 属性的默认值是 #9
      xml.XmlFormat := xfReadable;
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;
    二、NativeXML对象的创建

         1、 XML:=TNativeXML.Create();//aowner可以为nil,可以是Self(这样可以随着宿主的释放而释放)

         2、xml := TNativeXml.CreateEx(False, //是否建立 Declaration 对象, 如:VersionString//显示 XML 版本;EncodingString //显示 XML 编码
                                 True,  //是否建立跟节点
                                 nil    //指定属主
                                 );

         3、{使用 CreateName 建立可直接指定根节点的名称}    xml:=TNativeXml.CreateName('MyRoot'); 

         4、创那个键之后可以{使用 New 方法清空并重新构建}
    procedure TForm1.Button4Click(Sender: TObject);
    var
      xml: TNativeXml;
    begin
      xml := TNativeXml.Create(nil);
      xml.LoadFromFile(xmlFile);
      ShowMessage(xml.WriteToString);
      xml.New;   //  XML文件清空了相当于  xml.Clear;
      ShowMessage(xml.WriteToString);
      xml.Free;
    end;

    5、{使用 ReadFromString 从文本读入}
    procedure TForm1.Button5Click(Sender: TObject);
    const
      str = '<?xml version="1.0"?><Root><Items><item>1</item><item>2</item></Items></Root>';
    var
      xml: TNativeXml;
    begin
      xml := TNativeXml.Create(nil);
      xml.ReadFromString(str);
      xml.XmlFormat := xfReadable;
      Memo1.Text := xml.WriteToString;
    end

    三、保存XML文件

          1、xml.ExternalEncoding := seUTF8;  //指定编码,默认为 UTF8   
          2、xml.SaveToFile('Name.xml'); //保存

    四、XML节点{定义根节点   root:TSdElement}

      TsdElement = class(TsdContainerNode)
      private
        FNameID: integer;
      protected
        function GetName: Utf8String; override;
        function GetValue: Utf8String; override;
        procedure SetName(const Value: Utf8String); override;
        procedure SetValue(const Value: Utf8String); override;
        procedure ParseIntermediateData(P: TsdXmlParser); override;
        procedure CopyFrom(ANode: TObject); override;
      public
        // NodeAdd overrides the default addition in a container node: direct nodes
        // first, then subelements
        //function NodeAdd(ANode: TXmlNode): integer; override;
        function ParseStream(P: TsdXmlParser): TXmlNode; override;
        procedure WriteStream(S: TStream); override;
        function ElementType: TsdElementType; override;
      end;

    六、事件(摘自 万一)

    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, NativeXml{!};
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        procedure XmlEvent(Sender: TObject; ANode: TXmlNode); //TsdXmlNodeEvent 事件
      public
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    const
      xmlFile = 'C:\Temp\xml_test_files\CDATA_section.xml'; //测试文件
    {测试 OnNodeNew 事件:开始载入节点时发生}
    procedure TForm1.Button1Click(Sender: TObject);
    var
      xml: TNativeXml;
    begin
      Memo1.Clear;
      xml := TNativeXml.Create(nil);
      xml.OnNodeNew := XmlEvent;
      xml.LoadFromFile(xmlFile);
      xml.Free;
    end;
    {测试 OnNodeLoaded 事件:节点载入完成时发生}
    procedure TForm1.Button2Click(Sender: TObject);
    var
      xml: TNativeXml;
    begin
      Memo1.Clear;
      xml := TNativeXml.Create(nil);
      xml.OnNodeLoaded := XmlEvent;
      xml.LoadFromFile(xmlFile);
      xml.Free;
    end;
    {将被调用的事件, OnNodeNew 和 OnNodeLoaded 事件的参数格式是一样的}
    procedure TForm1.XmlEvent(Sender: TObject; ANode: TXmlNode);
    var
      depth: string;
    begin
      if ANode.ElementType = xeElement then         //xeElement 是 TsdElementType 枚举的类型之一
      begin
        depth := StringOfChar(#9, ANode.TreeDepth); //TreeDepth 是节点深度
        Memo1.Lines.Add(depth + ANode.Name);
      end;
    end;
    end.
     
  • 相关阅读:
    嵌入式开发之web服务器---boa移植
    图像处理之基础---去污算法
    图像处理之基础---傅里叶
    图像处理之基础---卷积
    图像处理之基础---各种滤波
    二维矩阵卷积运算实现
    图像处理之基础---卷积傅立叶变换中的复数
    图像处理-线性滤波-2 图像微分(1、2阶导数和拉普拉斯算子)
    Live555 中的客户端动态库.so的调用方式之一 程序中调用
    20个Flutter实例视频教程-01节底部导航栏和切换效果的制作-1
  • 原文地址:https://www.cnblogs.com/acuier/p/DelphiXML.html
Copyright © 2011-2022 走看看