• Delphi操作XML


    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:Tempxml_test_filesasic.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:Tempxml_test_filesCDATA_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.
    
     
    
    继续研究NativeXML:
    
    NativeXml的方法属性:ANativeXml  := TNativeXml.Create(Self);//创建
    
    ANativeXml.XmlFormat        := xfReadable; //格式
    
    ANativeXml.EncodingString   := 'UTF-8';//编码
    
    ANativeXml.ExternalEncoding := seUTF8;
    
    ANativeXml.LoadFromFile();//从文件夹中导入XML文件
    
    ANativeXml.SaveToFile();//XML文件保存到文件夹
    
    节点的方法属性:
    
    ANativeXml.Root;//XML文件的根节点,注意一切都从根开始
    
    ANativeXml.Root.NodeByName(‘节点名’);//通过节点名获得节点
    
    NativeXml.Root.Attributes;//节点的属性对象
    
    NativeXml.Root.ChildContainers;//节点的子节点对象
    
    NativeXml.Root.NodeNew();//增加新的子节点
    
    NativeXml.Root.Name;//节点名
    
    NativeXml.Root.Value;//节点值
    
    七、添加节点
    
    根节点的添加,可以在创建时直接指定根节点:
    
    var
    
    XmlDoc: TnativeXml;
    
    Node:TxmlNode;
    
    Begin
    
    XmlDoc := TNativeXml.CreateName('Data'); //创建根节点的语法
    
       XmlDoc.XmlFormat := xfReadable;
    
    ... ...
    
    添加节点有以下几种方法:
    
    Node:=xmlDoc.Root.NodeNew(‘BasicDataNo’);
    
    Node.value:=’1’;
    
    XmlDoc.Root.NodeNew(‘name’).value:=’sam’;
    
    xmlDoc.Root.WriteString(‘sex’,’male);
    
    ____________________________________
    
    更加完整的,在这里引用一下:
    
    uses NativeXml; 
     
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      // 
      node := xml.Root.NodeNew('item'); 
      node.Value := '张三'; 
      // 
      with xml.Root.NodeNew('item') do 
      begin 
        Value := '李四'; 
      end; 
      // 
      xml.Root.NodeNew('item').Value := '王五'; 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item>张三</item> 
     <item>李四</item> 
     <item>王五</item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button2Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      xml.Root.WriteString('N1', '张三'); 
      xml.Root.WriteString('N2', '李四'); 
      xml.Root.WriteString('N2', '王五'); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <N1>张三</N1> 
     <N2>王五</N2> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button3Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      xml.Root.NodeNew('item').WriteString('name', '张三'); 
      xml.Root.NodeNew('item').WriteString('name', '李四'); 
      xml.Root.NodeNew('item').WriteString('name', '王五'); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item> 
      <name>张三</name> 
     </item> 
     <item> 
      <name>李四</name> 
     </item> 
     <item> 
      <name>王五</name> 
     </item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button4Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      with xml.Root.NodeNew('item') do 
      begin 
        WriteString('name', '张三'); 
        WriteInteger('age', 11); 
      end; 
     
      with xml.Root.NodeNew('item') do 
      begin 
        WriteString('name', '李四'); 
        WriteInteger('age', 22);    //WriteFloat()、WriteDateTime()、WriteHex()、WriteBool()... 
      end; 
     
      with xml.Root.NodeNew('item') do 
      begin 
        WriteString('name', '王五'); 
        WriteInteger('age', 33); 
      end; 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item> 
      <name>张三</name> 
      <age>11</age> 
     </item> 
     <item> 
      <name>李四</name> 
      <age>22</age> 
     </item> 
     <item> 
      <name>王五</name> 
      <age>33</age> 
     </item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button5Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      with xml.Root.NodeNewAtIndex(0, 'item') do 
      begin 
        WriteString('name', '张三'); 
        WriteInteger('age', 11); 
      end; 
     
      with xml.Root.NodeNewAtIndex(0, 'item') do 
      begin 
        WriteString('name', '李四'); 
        WriteInteger('age', 22); 
      end; 
     
      with xml.Root.NodeNewAtIndex(0, 'item') do 
      begin 
        WriteString('name', '王五'); 
        WriteInteger('age', 33); 
      end; 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item> 
      <name>王五</name> 
      <age>33</age> 
     </item> 
     <item> 
      <name>李四</name> 
      <age>22</age> 
     </item> 
     <item> 
      <name>张三</name> 
      <age>11</age> 
     </item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button6Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      node := xml.NodeNew('item'); 
      node.WriteString('name', '张三'); 
      node.WriteInteger('age', 11); 
      xml.Root.NodeAdd(node); 
     
      xml.NodeNewEx('item', node);      //NodeNewEx 
      node.WriteString('name', '李四'); 
      node.WriteInteger('age', 22); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNew('item'); 
      node.WriteString('name', '王五'); 
      node.WriteInteger('age', 33); 
      xml.Root.NodeAdd(node); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item> 
      <name>张三</name> 
      <age>11</age> 
     </item> 
     <item> 
      <name>李四</name> 
      <age>22</age> 
     </item> 
     <item> 
      <name>王五</name> 
      <age>33</age> 
     </item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button7Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      node := xml.NodeNew('item', [xml.NodeNewText('name', '张三'), xml.NodeNewInt('age', 11)]); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNew('item', [xml.NodeNewText('name', '李四'), xml.NodeNewInt('age', 22)]); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNew('item', [xml.NodeNewText('name', '王五'), xml.NodeNewInt('age', 33)]); 
      xml.Root.NodeAdd(node); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上} 
     
    procedure TForm1.Button8Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      xml.Root.NodesAdd([ 
         xml.NodeNew('item', [xml.NodeNewText('name', '张三'), xml.NodeNewInt('age', 11)]), 
         xml.NodeNew('item', [xml.NodeNewText('name', '李四'), xml.NodeNewInt('age', 22)]), 
         xml.NodeNew('item', [xml.NodeNewText('name', '王五'), xml.NodeNewInt('age', 33)]) 
      ]); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上} 
     
    procedure TForm1.Button9Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      node := xml.NodeNew('A', [xml.NodeNew('B', [xml.NodeNew('C', [xml.NodeNewText('D', 'E')])])]); 
      xml.Root.NodeAdd(node); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <A> 
      <B> 
       <C> 
        <D>E</D> 
       </C> 
      </B> 
     </A> 
    </List> 
    *****************************************}
    
     
    
    八、属性、注释以及内容的添加
    
    添加属性:
    
     node := xml.Root.NodeNew('item');
    
    node.AttributeAdd('ID', '1');
    
    node.AttributeAdd('age', '11');
    
    node.Value := '张三';
    
    node := xml.NodeNewTextAttr('item', '张三', [xml.AttrText('ID', '1'), xml.AttrInt('age', 11)]);
    
    xml.Root.NodeAdd(node);
    
    {更详细代码}
    
    uses NativeXml; 
     
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      node := xml.Root.NodeNew('item'); 
      node.AttributeAdd('ID', '1'); 
      node.AttributeAdd('age', '11'); 
      node.Value := '张三'; 
     
      with xml.Root.NodeNew('item') do 
      begin 
        AttributeAdd('ID', '2'); 
        AttributeAdd('age', '22'); 
        Value := '李四'; 
      end; 
     
      with xml.Root.NodeNew('item') do 
      begin 
        AttributeAdd('ID', '3'); 
        AttributeAdd('age', '33'); 
        Value := '王五'; 
      end; 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item ID="1" age="11">张三</item> 
     <item ID="2" age="22">李四</item> 
     <item ID="3" age="33">王五</item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button2Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
      attr1,attr2: TsdAttribute; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      attr1 := TsdAttribute.Create(xml); 
      attr1.Name := 'ID'; 
      attr1.Value := '1'; 
      attr2 := TsdAttribute.Create(xml); 
      attr2.Name := 'age'; 
      attr2.ValueAsInteger := 11; 
      node := xml.Root.NodeNew('item'); 
      node.AttributeAdd(attr1); 
      node.AttributeAdd(attr2); 
      node.Value := '张三'; 
     
      attr1 := TsdAttribute.CreateName(xml, 'ID'); 
      attr1.Value := '2'; 
      attr2 := TsdAttribute.CreateNameValue(xml, 'age', '22'); 
      node := xml.Root.NodeNew('item'); 
      node.AttributesAdd([attr1, attr2]); 
      node.Value := '李四'; 
     
      node := xml.Root.NodeNew('item'); 
      node.AttributesAdd([TsdAttribute.CreateNameValue(xml, 'ID', '3'), TsdAttribute.CreateNameValue(xml, 'age', '33')]); 
      node.Value := '王五'; 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上} 
     
    procedure TForm1.Button3Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
      attr1,attr2: TsdAttribute; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      attr1 := xml.AttrText('ID', '1'); 
      attr2 := xml.AttrInt('age', 11); 
      node := xml.Root.NodeNew('item'); 
      node.AttributesAdd([attr1, attr2]); 
      node.Value := '张三'; 
     
      node := xml.Root.NodeNew('item'); 
      node.AttributesAdd([xml.AttrText('ID', '2'), xml.AttrInt('age', 22)]); 
      node.Value := '李四'; 
     
      with xml.Root.NodeNew('item') do begin 
        AttributesAdd([xml.AttrText('ID', '3'), xml.AttrInt('age', 33)]); 
        Value := '王五'; 
      end; 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上} 
     
    procedure TForm1.Button4Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      node := xml.NodeNewTextAttr('item', '张三', [xml.AttrText('ID', '1'), xml.AttrInt('age', 11)]); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNewTextAttr('item', '李四', [xml.AttrText('ID', '2'), xml.AttrInt('age', 22)]); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNewTextAttr('item', '王五', [xml.AttrText('ID', '3'), xml.AttrInt('age', 33)]); 
      xml.Root.NodeAdd(node); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上} 
     
    procedure TForm1.Button5Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      xml.Root.NodesAdd([ 
        xml.NodeNewTextAttr('item', '张三', [xml.AttrText('ID', '1'), xml.AttrInt('age', 11)]), 
        xml.NodeNewTextAttr('item', '李四', [xml.AttrText('ID', '2'), xml.AttrInt('age', 22)]), 
        xml.NodeNewTextAttr('item', '王五', [xml.AttrText('ID', '3'), xml.AttrInt('age', 33)]) 
      ]); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上} 
     
    procedure TForm1.Button6Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      node := xml.NodeNewAttr('item', [xml.AttrText('name', '张三'), xml.AttrInt('age', 11)]); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNewAttr('item', [xml.AttrText('name', '李四'), xml.AttrInt('age', 22)]); 
      xml.Root.NodeAdd(node); 
     
      node := xml.NodeNewAttr('item', [xml.AttrText('name', '王五'), xml.AttrInt('age', 33)]); 
      xml.Root.NodeAdd(node); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
     <item name="张三" age="11"/> 
     <item name="李四" age="22"/> 
     <item name="王五" age="33"/> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button7Click(Sender: TObject); 
    var 
      xml: TNativeXml; 
      node: TXmlNode; 
    begin 
      xml := TNativeXml.CreateName('List'); 
      xml.XmlFormat := xfReadable; 
     
      xml.Root.NodesAdd([ 
        xml.NodeNewAttr('item', [xml.AttrText('name', '张三'), xml.AttrInt('age', 11)]), 
        xml.NodeNewAttr('item', [xml.AttrText('name', '李四'), xml.AttrInt('age', 22)]), 
        xml.NodeNewAttr('item', [xml.AttrText('name', '王五'), xml.AttrInt('age', 33)]) 
      ]); 
     
      Memo1.Text := xml.WriteToString; 
      xml.Free; 
    end; 
    {结果同上}
    
    
    添加注释:
    
    node := xml.NodeNewTextType('注释名称', '注释内容', xeComment);
    
    xml.Root.NodeAdd(node);
    
    添加CDATA内容
    
    node.NodeAdd(xml.NodeNewTextType('DataName', 'XXXXXXXXXXXX', xeCData));
    
    {更详细代码}
    
    uses NativeXml;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      xml: TNativeXml;
      node: TXmlNode;
    begin
      xml := TNativeXml.CreateName('List');
      xml.XmlFormat := xfReadable;
    
      node := xml.NodeNewTextType('注释名称', '注释内容', xeComment);
      xml.Root.NodeAdd(node);
    
      node := xml.NodeNewTextType('item', '张三', xeElement);
      xml.Root.NodeAdd(node);
    
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;
    {***************************************
    <?xml version="1.0" encoding="UTF-8"?>
    <List><!--注释内容-->
     <item>张三</item>
    </List>
    *****************************************}
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      xml: TNativeXml;
      node: TXmlNode;
    begin
      xml := TNativeXml.CreateName('List');
      xml.XmlFormat := xfReadable;
    
      node := xml.NodeNewTextType('item', '张三', xeElement, [xml.AttrText('ID', '1'), xml.AttrInt('age', 11)]);
      xml.Root.NodeAdd(node);
    
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;
    {***************************************
    <?xml version="1.0" encoding="UTF-8"?>
    <List>
     <item ID="1" age="11">张三</item>
    </List>
    *****************************************}
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      xml: TNativeXml;
      node: TXmlNode;
    begin
      xml := TNativeXml.CreateName('List');
      xml.XmlFormat := xfReadable;
    
      node := xml.NodeNewTextTypeAttr('item', '', xeElement, [xml.AttrText('ID', '1')], [xml.NodeNewText('name', '张三'), xml.NodeNewInt('age', 11)]);
      xml.Root.NodeAdd(node);
    
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;
    {***************************************
    <?xml version="1.0" encoding="UTF-8"?>
    <List>
     <item ID="1">
      <name>张三</name>
      <age>11</age>
     </item>
    </List>
    *****************************************}
    
    procedure TForm1.Button4Click(Sender: TObject);
    var
      xml: TNativeXml;
      node: TXmlNode;
    begin
      xml := TNativeXml.CreateName('List');
      xml.XmlFormat := xfReadable;
    
      node := xml.Root.NodeNew('Data1');
      node.NodeAdd(xml.NodeNewTextType('DataName', 'XXXXXXXXXXXX', xeCData));
    
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;
    {***************************************
    <?xml version="1.0" encoding="UTF-8"?>
    <List>
     <Data1><![CDATA[XXXXXXXXXXXX]]></Data1>
    </List>
    *****************************************}
    
    procedure TForm1.Button5Click(Sender: TObject);
    var
      xml: TNativeXml;
    begin
      xml := TNativeXml.CreateName('List');
      xml.XmlFormat := xfReadable;
    
      xml.Root.NodeAdd(xml.NodeNewTextType('aaa', 'AAAAAAA', xeElement));
      xml.Root.NodeAdd(xml.NodeNewTextType('bbb', 'BBBBBBB', xeAttribute));
      xml.Root.NodeAdd(xml.NodeNewTextType('ccc', 'CCCCCCC', xeComment));
      xml.Root.NodeAdd(xml.NodeNewTextType('ddd', 'DDDDDDD', xeCData));
      xml.Root.NodeAdd(xml.NodeNewTextType('eee', 'EEEEEEE', xeCondSection));
      xml.Root.NodeAdd(xml.NodeNewTextType('fff', 'FFFFFFF', xeStylesheet));
      xml.Root.NodeAdd(xml.NodeNewTextType('ggg', 'GGGGGGG', xeDocType));
      xml.Root.NodeAdd(xml.NodeNewTextType('hhh', 'HHHHHHH', xeDtdElement));
      xml.Root.NodeAdd(xml.NodeNewTextType('iii', 'IIIIIII', xeDtdAttList));
      xml.Root.NodeAdd(xml.NodeNewTextType('jjj', 'JJJJJJJ', xeDtdEntity));
      xml.Root.NodeAdd(xml.NodeNewTextType('kkk', 'KKKKKKK', xeDtdNotation));
      xml.Root.NodeAdd(xml.NodeNewTextType('lll', 'LLLLLLL', xeInstruction));
      xml.Root.NodeAdd(xml.NodeNewTextType('mmm', 'MMMMMMM', xeCharData));
      xml.Root.NodeAdd(xml.NodeNewTextType('nnn', 'NNNNNNN', xeWhiteSpace));
      xml.Root.NodeAdd(xml.NodeNewTextType('ooo', 'OOOOOOO', xeQuotedText));
    
      Memo1.Text := xml.WriteToString;
      xml.Free;
    end;
    {***************************************
    <?xml version="1.0" encoding="UTF-8"?>
    <List bbb="BBBBBBB"NNNNNNN>
     <aaa>AAAAAAA</aaa>
     <!--CCCCCCC-->
     <![CDATA[DDDDDDD]]>
     <!--EEEEEEE-->
      <?xml-stylesheetFFFFFFF?>
    
     [
    GGGGGGG]>
    <!ELEMENT hhh HHHHHHH>
    <!ATTLIST iii IIIIIII>
    <!ENTITY jjj JJJJJJJ>
    <!NOTATION kkk KKKKKKK>
      <?LLLLLLL?>
    
     MMMMMMM
     "OOOOOOO"
    </List>
    *****************************************}
    
    九、NativeXml 读取
    
    NativeXml打开xml文本
    
    var xml: TNativeXml; 
     
    const 
      xmlStr = '<?xml version="1.0" encoding="UTF-8"?>' + 
               '<List>' + 
               '<item ID="No.1" age="11">张三</item>' + 
               '<item ID="No.2" age="22">李四</item>' + 
               '<item ID="No.3" age="33">王五</item>' + 
               '</List>'; 
     
    procedure TForm1.FormCreate(Sender: TObject); 
    begin 
      xml := TNativeXml.Create(Self); 
      xml.XmlFormat := xfReadable; 
      xml.ReadFromString(xmlStr);     {!} 
      Memo1.Text := xml.WriteToString; 
    end; 
     
    {RootNodes} 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      declaration: TsdDeclaration; 
      root: TXmlNode; 
    begin 
      ShowMessageFmt('%s, %s', [xml.VersionString, xml.EncodingString]);      //1.0, UTF-8 
      declaration := xml.RootNodes[0] as TsdDeclaration; 
      ShowMessageFmt('%s, %s', [declaration.Version, declaration.Encoding]);  //1.0, UTF-8 
     
      ShowMessageFmt('%s, %d', [xml.Root.Name, xml.Root.NodeCount]); //List, 3 
      root := xml.RootNodes[1]; 
      ShowMessageFmt('%s, %d', [root.Name, root.NodeCount]);         //List, 3 
    end; 
     
    procedure TForm1.Button2Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      node := xml.Root; 
      ShowMessage(node.WriteToString); 
    end; 
    {*************************************** 
    <List> 
        <item ID="No.1" age="11">张三</item> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button3Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      node := xml.Root[0]; 
      ShowMessage(node.WriteToString); 
    end; 
    {*************************************** 
    <item ID="No.1" age="11">张三</item> 
    *****************************************} 
     
    procedure TForm1.Button4Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      node := xml.Root[0]; 
      ShowMessage(node.Name);  //Item 
      ShowMessage(node.Value); //张三 
      ShowMessage(node.Attributes[0].Name);  //ID 
      ShowMessage(node.Attributes[0].Value); //No.1 
      ShowMessage(node.Attributes[0].WriteToString); //ID="No.1" 
    end; 
     
    procedure TForm1.Button5Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      node := xml.Root[0]; 
      ShowMessage(node.AttributeByName['ID'].Value); //No.1 
      ShowMessage(node.AttributeValueByName['ID']);  //No.1 
    end; 
     
    procedure TForm1.Button6Click(Sender: TObject); 
    var 
      nodeList: TsdNodeList; 
      node: TXmlNode; 
      i: Integer; 
    begin 
      node := xml.Root; 
      ShowMessage(node.ReadString('item'));       //张三 
      ShowMessage(node.FindNode('item').Value);   //张三 
      ShowMessage(node.NodeByName('item').Value); //张三 
      //node.NodesByName(); 用法同 FindNodes 
     
      nodeList := TsdNodeList.Create(False); 
      node.FindNodes('item', nodeList); 
      for i := 0 to nodeList.Count - 1 do 
      begin 
        ShowMessage(nodeList[i].Value); //张三/李四/王五 
      end; 
      nodeList.Free; 
      // 
      for i := 0 to node.NodeCount - 1 do 
      begin 
        ShowMessage(node[i].Value);     //张三/李四/王五 
      end; 
    end; 
     
    procedure TForm1.Button7Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      node := xml.Root[0]; 
      ShowMessage(node.Parent.Name);             //List 
      ShowMessage(node.Document.EncodingString); //UTF-8 
    end; 
     
    {StringTable} 
    procedure TForm1.Button8Click(Sender: TObject); 
    const 
      path = 'c:	emp	est.txt'; 
    begin 
      xml.StringTable.SaveToFile(path); 
      Memo1.Lines.LoadFromFile(path, TEncoding.UTF8); 
    end; 
    {*************************************** 
    22    1 
    33    1 
    11    1 
    age    3 
    ID    3 
    UTF-8    1 
    List    1 
    1.0    1 
    No.2    1 
    item    1 
    No.1    1 
    No.3    1 
    张三    1 
    item    2 
    王五    1 
    李四    1 
    encoding    1 
    version    1 
    *****************************************}
    {*************************************** 
    关于NativeXML的编辑操作:
    
    uses NativeXml; 
     
    var xml: TNativeXml; 
     
    const 
      xmlStr = '<?xml version="1.0" encoding="UTF-8"?>' + 
               '<List>' + 
               '<item ID="No.1" age="11">张三</item>' + 
               '<item ID="No.2" age="22">李四</item>' + 
               '<item ID="No.3" age="33">王五</item>' + 
               '</List>'; 
     
    procedure TForm1.FormCreate(Sender: TObject); 
    begin 
      xml := TNativeXml.Create(Self); 
      xml.XmlFormat := xfReadable; 
      xml.ReadFromString(xmlStr);     {!} 
      Memo1.Text := xml.WriteToString; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.1" age="11">张三</item> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
     
    {插入、删除} 
    procedure TForm1.Button2Click(Sender: TObject); 
    begin 
      xml.ReadFromString(xmlStr); 
      xml.Root.NodeInsert(1, xml.NodeNewText('item', '赵六')); 
      xml.Root.NodeDelete(xml.Root.NodeCount - 1); 
      Memo1.Text := xml.WriteToString; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.1" age="11">张三</item> 
        <item>赵六</item> 
        <item ID="No.2" age="22">李四</item> 
    </List> 
    *****************************************} 
     
    {移除} 
    procedure TForm1.Button3Click(Sender: TObject); 
    begin 
      xml.ReadFromString(xmlStr); 
      xml.Root.NodeRemove(xml.Root[0]); 
      Memo1.Text := xml.WriteToString; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
     
    {交换} 
    procedure TForm1.Button4Click(Sender: TObject); 
    begin 
      xml.ReadFromString(xmlStr); 
      xml.Root.NodeExchange(0, 1); 
      Memo1.Text := xml.WriteToString; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.1" age="11">张三</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
     
    {提取} 
    procedure TForm1.Button5Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      xml.ReadFromString(xmlStr); 
      node := xml.Root.NodeExtract(xml.Root[1]); 
      Memo1.Text := node.WriteToString; 
      Memo1.Lines.Add('---------------------------------------'); 
      Memo1.Lines.Add(xml.WriteToString); 
    end; 
    {*************************************** 
        <item ID="No.2" age="22">李四</item> 
    --------------------------------------- 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.1" age="11">张三</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
     
    {获取位置} 
    procedure TForm1.Button6Click(Sender: TObject); 
    var 
      n1,n2: Integer; 
    begin 
      xml.ReadFromString(xmlStr); 
     
      n1 := xml.Root.NodeIndexOf(xml.Root[xml.Root.NodeCount-1]); 
      ShowMessage(IntToStr(n1)); //2 
     
      n2 := xml.Root.NodeIndexOf(xml.Root[xml.Root.NodeCount]); 
      ShowMessage(IntToStr(n2)); //-1 
    end; 
     
    procedure TForm1.Button7Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      xml.ReadFromString(xmlStr); 
     
      node := xml.Root.NodeFindOrCreate('item'); 
      ShowMessage(node.WriteToString); //<item ID="No.1" age="11">张三</item> 
     
      node := xml.Root.NodeFindOrCreate('张三'); 
      ShowMessage(node.WriteToString); //<张三/> 
      Memo1.Text := xml.WriteToString; 
    end; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.1" age="11">张三</item> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.3" age="33">王五</item> 
        <张三/> 
    </List> 
    *****************************************} 
     
    procedure TForm1.Button8Click(Sender: TObject); 
    var 
      node: TXmlNode; 
    begin 
      xml.ReadFromString(xmlStr); 
      node := xml.Root[0]; 
      node.Clear; 
      Memo1.Text := xml.WriteToString; 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item/> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
      xml.Root.DeleteEmptyNodes; 
      Memo1.Lines.Add('---------------------------------------'); 
      Memo1.Lines.Add(xml.WriteToString); 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List> 
        <item ID="No.2" age="22">李四</item> 
        <item ID="No.3" age="33">王五</item> 
    </List> 
    *****************************************} 
      xml.Root.Clear; 
      Memo1.Lines.Add('---------------------------------------'); 
      Memo1.Lines.Add(xml.WriteToString); 
    {*************************************** 
    <?xml version="1.0" encoding="UTF-8"?> 
    <List/> 
    *****************************************} 
      xml.Clear; 
      Memo1.Lines.Add('---------------------------------------'); 
      Memo1.Lines.Add(xml.WriteToString); 
    {*************************************** 
     
    *****************************************}
    end;
    
    xml.FloatSignificantDigits := 7;
    
    这用来控制浮点类型的小数位数,经测试,发现:
    
    value:=123.123456789(共13个数字,不含点)
    
    如果  xml.FloatSignificantDigits:=1,则为100;为2,则为120,为3则为123,为4,则为123.1.....为7,则为123.1234.....
    
    是不是有点怪异?呵呵
    
     
    
    以下引自万一:
    
     
    
    安装包中的 NativeXmlObjectStorage.pas 是 NativeXml 的扩展应用,可以把组件、对象和窗体序列化为 Xml 
    文件。
    
    其中方便使用的是两个类:TsdXmlObjectWriter、TsdXmlObjectReader,也可使用下面三组函数:
    
    ComponentCreateFromXmlFile();
    ComponentCreateFromXmlNode();
    ComponentCreateFromXmlStream();
    ComponentCreateFromXmlString();
    ComponentSaveToXmlFile();
    ComponentSaveToXmlNode();
    ComponentSaveToXmlStream();
    ComponentSaveToXmlString();
    
    ObjectLoadFromXmlFile();
    ObjectLoadFromXmlNode();
    ObjectLoadFromXmlStream();
    ObjectLoadFromXmlString();
    ObjectSaveToXmlFile();
    ObjectSaveToXmlNode();
    ObjectSaveToXmlStream();
    ObjectSaveToXmlString();
    
    FormCreateFromXmlFile();
    FormCreateFromXmlStream();
    FormCreateFromXmlString();
    FormSaveToXmlFile();
    FormSaveToXmlStream();
    FormSaveToXmlString();
    
    使用NativeXml的例子
    3.1.例子A:XML的装载、存储和导出
     
    
     这个例子显示如何加载一个XML文档,然后以可读格式导出到一个TMemo领域。
      拖放一个TEdit(Edit1),TButton(Button1)和一个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层的节点。 
      添加Tedit、TButton和TMemo到窗体,然后将下面的事件代码连接到按钮的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的方式,按顺序读文件,每当一个节点初始化和加载时产生事件。
      添加一个TButton(Button3)和一个TMemo(Memo1)到您的窗体,然后将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:	est.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:	est.xml');
      finally
        ADoc.Free;
      end;
    end;
    符号引用(Symbol Reference)
    4.1.类(Classes)
    4.1.1.TComponentAccess类
      TComponentAccess =
    class(TComponent)
    4.1.1.1.ComponentState
      property ComponentState;
    4.1.1.2.SetComponentState
      procedure
    SetComponentState(const AState: TComponentState);
    4.1.2.TNativeXml类
      TNativeXml =
    class(TPersistent)
      TNativeXml是XML文件的载体。创建一个TNativeXml,然后使用方法LoadFromFile、LoadFromStream或ReadFromString加载XML文档到内存中。或者从头开始使用Root.NodeNew添加节点,并最终SaveToFile和SaveToStream保存结果为一个XML文档。用属性Xmlformat = xfReadable确保缩进(易读)输出。
    4.1.2.1.AbortParsing
      property AbortParsing:
    boolean;
      如果您使用一个SAX-like方式的OnNodeNew和OnNodeLoaded事件,并要中止解析过程,设置AbortParsing为True。例如:
    procedure MyForm.NativeXmlNodeLoaded(Sender: TObject; Node: TXmlNode);
     begin
       if (Node.Name = 'LastNode') and (Sender is TNativeXml) then
         TNativeXml(Sender).AbortParsing := True;
     end;
    4.1.2.2.BinaryEncoding
      property BinaryEncoding:
    TBinaryEncodingType;
      当调用TXmlNode.BufferRead和TXmlNode.BufferWrite时,将使用什么样的二进制编码。默认值是xbeBase64。
    4.1.2.3.CommentString
      property CommentString:
    UTF8String;
      可以通过此属性访问上方的根元素<!--{comment} - >的一个注释字符串。关联此说明(comment)属性,将它添加到XML文档。使用属性RootNodeList添加/插入/提取多条说明。
    4.1.2.4.DropCommentsOnParse
      property DropCommentsOnParse:
    boolean;
      设置DropCommentsOnParse,如果你对在你的对象模型数据中任何的说明节点不感兴趣,解析过程中遇到的所有的说明将被跳过,而不增加这个节点,ElementType = xeComment(这是默认值)。请注意当您设定这个选项,以后你不能在原来的位置重建一个XML文件的说明。
    4.1.2.5.EncodingString
      property EncodingString:
    UTF8String;
      编码字符串(例如“的UTF-8”或“的UTF-16”)。这种编码的字符串存储在头部。
      例子 1
      为了得到这个头:
      <?xml
    version="1.0" encoding="UTF-16" ?>
      输入以下代码:
      MyXmlDocument.EncodingString
    := 'UTF-16';
      当读取一个文件,EncodingString将包含编码。
    4.1.2.6.EntityByName
      property EntityByName
    [AName: UTF8String]: UTF8String;
      返回指定名称命名实体的值。这些实体值从被分析的Doctype声明中获得(如果有的话)。
    4.1.2.7.ExternalEncoding
      property ExternalEncoding:
    TStringEncodingType;
      ExternalEncoding定义XML文件的保存格式。设置ExternalEncoding到se8bit保存为纯文本文件,以seUtf8保存为UTF8的文件(以字节顺序标记#EF BB FF),以seUTF16LE保存为Unicode(字节顺序标记#FF FE)。当读取一个XML文件时,ExternalEncoding值将被设置按字节顺序标记和/或找到的编码声明。
    4.1.2.8.FloatAllowScientific
      property
    FloatAllowScientific: boolean;
      当浮点值转换成字符串(如在WriteFloat),NativeXml将允许在某些情况下输出科学记数法,只有在FloatAllowScientific值为True(默认)时,返回结果缩短。
    4.1.2.9.FloatSignificantDigits
      property FloatSignificantDigits:
    integer;
      当浮点值转换成字符串(如在WriteFloat),NativeXml将利用这属性表示有效位数。默认值是cDefaultFloatSignificantDigits
    = 64.1.2.10.IndentString
      property IndentString:
    UTF8String;
      IndentString是缩进使用的字符串。默认情况下,它是两个空格:'  '。如果你需要其他格式,可以设置IndentString为其他的东西,或将其设置为空字符串,以避免缩进。
    4.1.2.11.OnNodeCompare
      property OnNodeCompare:
    TXmlNodeCompareEvent;
      此事件被一个节点的SortChildNodes方法被调用,并没有直接比较的方法提供。如果你要使用对象事件的节点为基础的比较方法,实现此事件。
    4.1.2.12.OnNodeLoaded
      property OnNodeLoaded:
    TXmlNodeEvent;
      解析器解析节点已完成时调用此事件,并在内存中创建的完整内容。
    4.1.2.13.OnNodeNew
      property OnNodeNew:
    TXmlNodeEvent;
      当解析器遇到一个新的节点此事件被调用。
    4.1.2.14.OnProgress
      property OnProgress:
    TXmlProgressEvent;
      加载和保存XML文档期间调用OnProgress。Size参数包含流中的位置。此事件可以被用来实现在装载和保存的进度指示器。该事件在每一个被读出或写入节点后调用。
    4.1.2.15.OnUnicodeLoss
      property OnUnicodeLoss:
    TNotifyEvent;
      从Unicode流或文件读取时,如果有一个Unicode转换丢失警告,调用此事件。
    4.1.2.16.ParserWarnings
      property ParserWarnings:
    boolean;
      默认情况下ParserWarnings为True。如果为True,XML文档不正确时,解析器将抛出一个例外。如果为False,解析器将试图忽略非关键的警告,如基于XML的某些文件SOAP类型消息。
    4.1.2.17.Root
      property Root: TXmlNode;
      根(Root)是在XML文件最上面的元素。通过根阅读任何子元素。当创建一个新的XML文档,您可以通过CreateName创建并自动包含根节点。
    4.1.2.18.RootNodeList
      property RootNodeList:
    TXmlNode;
      RootNodeList可用于直接访问XML文档的根的节点列表。通常,这个列表是由一个声明节点跟着一个标准的根节点。你可以使用这个属性来添加或删除注释(comments),样式(stylesheets),DTD的等
    4.1.2.19.StyleSheetNode
      property StyleSheetNode:
    TXmlNode;
      从此XML文件获取样式节点使用。如果节点尚不存在,它将被创建(因此,如果你使用这个属性,并且不设置任何属性,一个空的样式节点将产生)。
    4.1.2.20.UseFullNodes
      property UseFullNodes:
    boolean;
      保存XML文档之前,设置UseFullNodes为True,以确保所有节点是由<Node>
    ...</Node>为代表,而不是短版<Node/>。UseFullNodes默认为False。
    4.1.2.21.UseLocalBias
      property UseLocalBias:
    Boolean;
      如果你在读写datetime值时,要考虑当地时差,将UseLocalBias设置为True。UseLocalBias是默认为False。
    4.1.2.22.Utf8Encoded
      property Utf8Encoded:
    boolean;
      此属性是为向后兼容的:NativeXml所有字符串都是UTF8Strings,内部编码始终是UTF8的编码。
    4.1.2.23.VersionString
      property VersionString:
    UTF8String;
      读完文档后,这个属性包含XML版本(通常是“1.0”)。
    4.1.2.24.WriteOnDefault
      property WriteOnDefault:
    boolean;
      如果你不想写默认值到XML文档,设置WriteOnDefault为False。此选项可避免产生巨大的冗余信息的文件,并会加快写入。
    4.1.2.25.XmlFormat
      property XmlFormat:
    TXmlFormatType;
      默认情况下XmlFormat设置为xfCompact。此设置是符合该规范,并NativeXml只会在XML文件中产生#$0A这个Ansi符号。通过设置XmlFormat到xfReadable,你可以方便地生成易读的XML文件,其中包含每个元素缩进和回车。
    4.1.2.26.Assign
      procedure Assign(Source:
    TPersistent); override;
      当关联到一个TnativeXml的源对象,将会从源对象复制它的所有数据。
    4.1.2.27.Clear
      procedure Clear; virtual;
      调用Clear从对象中删除所有数据,并恢复所有默认值。
    4.1.2.28.Create
      constructor Create;
    virtual;
      创建一个新的NativeXml文档,可以用来读取或写入XML文件。一个文档被创建,必须在后期使用Free释放。
      例子 1
     var
       ADoc: TNativeXml;
     begin
       ADoc := TNativeXml.Create;
       try
         ADoc.LoadFromFile('c:	empmyxml.xml');
         {do something with the document here}
       finally
         ADoc.Free;
       end;
     end;
    4.1.2.29.CreateName
      constructor
    CreateName(const ARootName: UTF8String); virtual;
      使用CreateName创建一个新的XML文件,将自动包含一个名为ARootName根元素。
    4.1.2.30.Destroy
      destructor Destroy;
    override;
      Destroy将释放在TNativeXml对象中的所有数据。包括根节点下的所有子节点。不要调用Destroy,直接的调用Free代替。
    4.1.2.31.IsEmpty
      function IsEmpty: boolean;
    virtual;
      如果根是被清除的,换句话说,根本不包含任何价值,没有名字,没有子节点,并没有属性,函数IsEmpty返回True。
    4.1.2.32.LoadFromFile
      procedure
    LoadFromFile(const AFileName: string); virtual;
      调用LoadFromFile过程加载一个指定文件的名XML文件。请参阅Create的例子。当它遇到不正确的XML时,该LoadFromFile过程将引发EFilerError异常。
    4.1.2.33.LoadFromStream
      procedure
    LoadFromStream(Stream: TStream); virtual;
      从流对象TStream加载XML文档。当它遇到不正确的XML,该LoadFromStream过程将引发EFilerError异常。该方法可用于任何TStream的继承类。另见LoadFromFile和ReadFromString。
    4.1.2.34.ReadFromString
      procedure
    ReadFromString(const AValue: UTF8String); virtual;
      调用ReadFromString过程从UTF8String类型的Avalue装载XML文档。当它遇到不正确的XML,该ReadFromString过程将引发EFilerError异常。
    4.1.2.35.ResolveEntityReferences
      procedure
    ResolveEntityReferences;
      当文档装载之后,调用ResolveEntityReferences,以解决任何当前实体引用(&Entity;)。当在DTD中找到一个实体,它将取代实体引用。当一个实体包含XML标记,它会被解析,并成为文档树的一部分。由于调用ResolveEntityReferences增加了一些额外的开销,这不是自动完成的。如果你想要做的实体更换,一个很好的时机是LoadFromFile之后调用ResolveEntityReferences。
    4.1.2.36.SaveToFile
      procedure SaveToFile(const
    AFileName: string); virtual;
      调用SaveToFile保存XML文档到一个指定文件名的文件。如果文件存在,它将不经警告覆盖。如果该文件不能被创建,就会产生一个标准I/O异常。如果你希望文件包含XML的缩进,设置XmlFormat到xfReadable,使更多的人易读。这不是默认的,也没有使用XML规范。
      在保存之前,可以通过设置下面两个属性,保存为特殊的编码类型:
      ExternalEncoding
      EncodingString
      ExternalEncoding可se8bit(纯ASCII码),seUtf8(UTF-8),seUtf16LE(Unicode)或seUtf16BE(大编码的Unicode)。
      不要忘记,还要设置EncodingString(如“UTF-8”或“UTF-16”)这与你的ExternalEncoding匹配。
    4.1.2.37.SaveToStream
      procedure
    SaveToStream(Stream: TStream); virtual;
      调用SaveToStream保存XML文档到流。流可以是任何TStream的后裔。如果你想流包含XML的缩进,使更多的人易读,设置XmlFormat到xfReadable。这不是默认的,也没有使用XML规范。请参阅SaveToFile中有关如何保存特殊的编码信息。
    4.1.2.38.WriteToString
      function WriteToString:
    UTF8String; virtual;
      调用WriteToString以保存XML文档到UTF8String。如果您希望UTF8String包含XML的缩进,使更多的人易读,设置XmlFormat到xfReadable。这不是默认的,也没有使用XML规范。
  • 相关阅读:
    页面 分页加载图文 微服务架构
    二阶段 三阶段 提交 Paxos
    SignatureDoesNotMatch REST接口 在任何时间、任何地点、任何互联网设备上 在Header中包含签名
    tmp
    base64 hash sha
    对云资源服务商资源读写的架构思考:前端代码走token
    微信小程序存放视频文件到阿里云用到算法js脚本文件
    REST RPC HTTP vs 高性能二进制协议 序列化和通信协议
    角色 演员
    服务端签名后直传 服务端签名直传并设置上传回调
  • 原文地址:https://www.cnblogs.com/qingsong/p/3569139.html
Copyright © 2020-2023  润新知