91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Delphi中怎么使用NativeXml處理XML

發布時間:2021-07-30 16:46:43 來源:億速云 閱讀:411 作者:Leah 欄目:大數據

Delphi中怎么使用NativeXml處理XML,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

使用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', [In   dent(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;


3.5.例子E:使用UTF8和Unicode編碼的文件(支持widestring)
  這個例子顯示了如何創建和加載支持widestrings的XML文件。
3.5.1.NativeXml內部編碼
  NativeXml可以工作在兩種“模式”:要么所有的內部字符串是普通的ANSI字符串或所有內部字符串是UTF8編碼字符串。字符串類型不會改變(它仍然是“string”)。雖然Delphi7有一種特殊類型“Utf8String”,但沒有使用,以保持較低的Delphi版本的兼容性。
  為了確保你的XML文檔可以使用widestrings,創建它,然后直接設置屬性“Utf8Encoded”為True,如下所示:
procedure CreateXML;
var
    ADoc: TNativeXml;
begin
    ADoc := TNativeXml.CreateName('Root');
    try
      // Make sure to be able to handle widestrings
      ADoc.Utf8Encoded := True;
      // ..add all your creation code here
    finally
      ADoc.Free;
    end;
end;
3.5.2.NativeXml外部編碼
  保存您的文檔時,為外部文件或流選擇適當的編碼(SaveToStream也需要正確的編碼保存)。設置屬性“ExternalEncoding”到其中的任何值:
  se8bit:這將返回一個純ASCII文件,所有的Unicode/widestring字符值高于$FF。這是默認值。
  seUTF16LE:這將返回一個Unicode文件的字節順序標記$FF FE。這應該作為一個Unicode文件的默認。
  seUTF16BE:這將返回大字節(big-endian)Unicode文件的字節順序標記$FE FF。
  seUTF8:這將返回一個UTF-8編碼文件的字節順序標記$FF BB BF。UTF-8在大部分字符為西方或拉丁語時,是更好的存儲方式。然而,它可以為中文或日文等多種語言提供更多的空間。
  這里有一個關于如何設置外部編碼的例子:
procedure CreateXML;
var
    ADoc: TNativeXml;
begin
    ADoc := TNativeXml.CreateName('Root');
    try
      // Make sure to be able to handle widestrings
      ADoc.Utf8Encoded := True;

      // ..add all your creation code here

      // Save to unicode
      ADoc.ExternalEncoding := seUTF16LE;
      ADoc.EncodingString := 'UTF-16';
      ADoc.SaveToFile('c:\temp\test.xml');    
    finally
      ADoc.Free;
    end;
end;
3.5.3.添加widestrings
  添加widestrings到文檔很容易。每個節點的值可以設置為widestring,使用屬性的ValueAsWidestring,并可以在一般情況下使用FromWidestring函數添加widestrings。
  下面的例子代碼,增加了一個新的節點到根,然后設置節點名字(Name)為Aname,節點值(value)為AValue:
procedure AddNode(ADoc: TXmlDocument; AName, AValue: widestring);
begin
 with ADoc.Root do
   with NodeNew(FromWidestring(AName)) do
     ValueAsWidestring := AValue;
end;
3.5.4.加載XML文件的擴展字符
  當讀取包含擴展字符的XML文件,重要的是在引入前設置Utf8Encoded為True,像這樣:
function CreateXMLAndLoadFromFile(AFilename: string): TNativeXml;
begin
    Result := TNativeXml.Create;
    Result.Utf8Encoded := True;
    Result.LoadFromFile(AFilename);  
end;
  當從一個流(例如從一個TCP連接)讀入,流并不總是包含字節順序標記(BOM)。但是,如果流是Unicode,NativeXml將承認它,因此沒有任何幫助。例如:
function CreateXMLAndLoadFromStream(S: TStream): TNativeXml;
begin
    Result := TNativeXml.Create;
    Result.Utf8Encoded := True;
    Result.LoadFromStream(S);  
end;
  如果你知道你的流具有一定的編碼,你可以強制NativeXml使用這種編碼,例如:
function CreateXMLAndLoadFromUTF8Stream(S: TStream): TNativeXml;
begin
    Result := TNativeXml.Create;
    Result.Utf8Encoded := True;
    // The stream is encoded using UTF8
    Result.ExternalEncoding := seUTF8;
    Result.LoadFromStream(S);  
end;

看完上述內容,你們掌握Delphi中怎么使用NativeXml處理XML的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方正县| 搜索| 江门市| 大理市| 剑阁县| 宁夏| 新乐市| 阳西县| 丰原市| 广平县| 南汇区| 辽宁省| 斗六市| 读书| 思南县| 新余市| 尼勒克县| 孟津县| 皋兰县| 石屏县| 安徽省| 九龙坡区| 桃园市| 屯门区| 正定县| 望都县| 乌拉特后旗| 黑龙江省| 青田县| 横峰县| 石狮市| 苏州市| 宁化县| 塔城市| 九龙坡区| 郑州市| 高密市| 乐至县| 扎囊县| 肥东县| 伊吾县|