Delphi使用NativeXml處理XML(二)

前言
git

咱們接着上文的《Delphi使用NativeXml處理XML(一)》繼續進行。
微信


正文
ide

 4、符號引用(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 = 6。
4.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:\temp\myxml.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規範。
4.1.3.TPersistentAccess類
  TPersistentAccess = class(TPersistent)
4.1.4.TReaderAccess類
  TReaderAccess = class(TReader)
4.1.5.TsdBufferedReadStream類
  TsdBufferedReadStream = class(TStream)
  TsdBufferedReadStream是一個流的緩衝,它爲另外的TStream創建讀取緩衝區,並從流讀取到緩衝區。此流類型只能支持讀取。
4.1.5.1.Create
  constructor Create(AStream: TStream; Owned: boolean);
  經過Create方法爲源流AStream建立讀取流,此源流必須已經被初始化。如Owned設置爲True,源流將被TsdBufferedReadStream釋放。
4.1.5.2.Destroy
  destructor Destroy; override;
4.1.5.3.Read
  function Read(var Buffer; Count: Longint): Longint; override;
4.1.5.4.Seek
  function Seek(Offset: Longint; Origin: Word): Longint; override;
4.1.5.5.Write
  function Write(const Buffer; Count: Longint): Longint; override;
4.1.6.TsdBufferedStream類
  TsdBufferedStream = class(TStream)
  未實現。
4.1.6.1.Create
  constructor Create(AStream: TStream; Owned: Boolean);
4.1.6.2.Destroy
  destructor Destroy; override;
4.1.6.3.Read
  function Read(var Buffer: array of Byte; Offset: Longint; Count: Longint): Longint; override;
4.1.6.4.Seek
  function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
4.1.6.5.Write
  function Write(const Buffer: array of Byte; Offset: Longint; Count: Longint): Longint; override;
4.1.7.TsdBufferedWriteStream類
  TsdBufferedWriteStream = class(TStream)
  TsdBufferedWriteStream是一個流的緩衝,他爲另外的Tstream創建只寫緩衝區,並從緩衝區寫入到流。此流類型只能支持寫入。
4.1.7.1.Create
  constructor Create(AStream: TStream; Owned: boolean);
  經過Create方法爲源流AStream建立目標緩衝流,這個目標流必須已經被初始化。如Owned設置爲True,目標流將被TsdBufferedWriteStream釋放。
4.1.7.2.Destroy
  destructor Destroy; override;
4.1.7.3.Read
  function Read(var Buffer; Count: Longint): Longint; override;
4.1.7.4.Seek
  function Seek(Offset: Longint; Origin: Word): Longint; override;
4.1.7.5.Write
  function Write(const Buffer; Count: Longint): Longint; override;
4.1.8.TsdCodecStream類
  TsdCodecStream = class(TStream)
  TsdCodecStream是讀寫編碼文件的基本解析器類。參見TsdUtf8Stream獲取更多信息。
4.1.8.1.Encoding
  property Encoding: TstringEncodingType;
  在寫入流以前或者讀取流以後,設置Encoding肯定文檔的編碼類型。
4.1.8.2.OnUnicodeLoss
  property OnUnicodeLoss: TNotifyEvent;
  若是有一個Unicode轉換錯誤警告,此事件被調用。
4.1.8.3.WarningUnicodeLoss
  property WarningUnicodeLoss: boolean;
  在裝載一個XML文件後讀取這個值。若是有一個Unicode轉換流失警告,他的值是True。
4.1.8.4.Create
  constructor Create(AStream: TStream); virtual;
  調用Create建立一個新的TsdCodectream,它以流AStream爲基礎進行輸入或輸出。在第一次讀取後,輸入流類型將肯定,而編碼(Encoding)屬性將進行相應的設置。當使用Write寫入數據到流中,編碼 (Encoding) 屬性必須在此以前設置,說明生產什麼樣的流。
4.1.8.5.Read
  function Read(var Buffer: array of Byte; Offset: Longint; Count: Longint): Longint; override;
  function Read(var Buffer; Count: Longint): Longint; override;
4.1.8.6.Seek
  function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
  function Seek(Offset: Longint; Origin: Word): Longint; override;
4.1.8.7.Write
  function Write(const Buffer: array of Byte; Offset: Longint; Count: Longint): Longint; override;
  function Write(const Buffer; Count: Longint): Longint; override;
4.1.9.TsdStringBuilder類
  TsdStringBuilder = class
  簡單字符串生成器類,分配字符串內存,更有效地避免重複從新分配。
4.1.9.1.Data
  property Data [Index: integer]: AnsiChar;
4.1.9.2.Length
  property Length: integer;
4.1.9.3.AddChar
  procedure AddChar(Ch: AnsiChar);
4.1.9.4.AddString
  procedure AddString(var S: UTF8String);
4.1.9.5.Clear
  procedure Clear;
4.1.9.6.Create
  constructor Create;
4.1.9.7.StringCopy
  function StringCopy(AFirst: integer; ALength: integer): UTF8String;
4.1.9.8.Value
  function Value: UTF8String;
4.1.10.TsdSurplusReader類
  TsdSurplusReader = class
  TsdSurplusReader是一個簡單的類,它能夠存儲少量字符,並能夠在讀取基礎流前,返回這些字符。
4.1.10.1.Surplus
  property Surplus: UTF8String;
4.1.10.2.Create
  constructor Create(AStream: TStream);
4.1.10.3.ReadChar
  function ReadChar(var Ch: AnsiChar): integer;
4.1.10.4.ReadCharSkipBlanks
  function ReadCharSkipBlanks(var Ch: AnsiChar): boolean;
4.1.11.TsdUtf8Stream類
  TsdUtf8Stream = class(TsdCodecStream)
  TsdUtf8Stream是一個轉換流,將裝載的ANSI、UTF8或Unicode文件,轉換成UTF8。該流也能夠將UTF8數據保存爲ANSI、UTF8或Unicode。
4.1.12.TsdUTF8StringList類
  TsdUTF8StringList = class(TPersistent)
  很是簡單的字符串列表,用於管理保存在節點上的屬性列表
4.1.12.1.Count
  property Count: integer;
4.1.12.2.Items
  property Items [Index: integer]: UTF8String;
4.1.12.3.Names
  property Names [Index: integer]: UTF8String;
4.1.12.4.Text
  property Text: UTF8String;
4.1.12.5.Values
  property Values [const Name: UTF8String]: UTF8String;
4.1.12.6.Add
  function Add(const S: UTF8String): integer;
4.1.12.7.Assign
  procedure Assign(Source: TPersistent); override;
4.1.12.8.Clear
  procedure Clear;
4.1.12.9.Delete
  procedure Delete(Index: Integer);
4.1.12.10.IndexOfName
  function IndexOfName(const Name: UTF8String): integer;
4.1.13.TsdUTF8StringStream類
  TsdUTF8StringStream = class(TMemoryStream)
4.1.13.1.Create
  constructor Create(const S: UTF8String);
4.1.13.2.DataString
  function DataString: UTF8String;
4.1.14.TsdXmlObjectReader類
  TsdXmlObjectReader = class(TPersistent)
  使用TsdXmlObjectReader能夠從一個XML節點讀取任何TPersistent後代公佈的屬性。
  譯者注:該類不支持東方語言字符串,若是某節點中引用了沒經RegisterClass註冊的類,會引起異常。
4.1.14.1.CreateComponent
  function CreateComponent(ANode: TXmlNode; AOwner: TComponent; AParent: TComponent; AName: string): TComponent;
  調用CreateComponent 方法,首先建立AComponent,而後從TXmlNode類型的ANode讀取其公佈的屬性。指定AParent爲了解決Parent正確的方法和事件參考。爲了成功地從頭開始建立組件,組件的類必須事先調用RegisterClass進行登記。指定Aowner將爲全部者組件添加該組件爲子組件。這一般是一個形式。指定AName做爲建立的組件的新組件的名稱。
4.1.14.2.ReadComponent
  procedure ReadComponent(ANode: TXmlNode; AComponent: TComponent; AParent: TComponent);
  調用ReadComponent從TXmlNode類型的ANode讀取AComponent公佈的屬性。指定AParent爲了解決Parent正確的方法和事件參考。
  ReadComponent調用ReadObject完成工做。
4.1.14.3.ReadObject
  procedure ReadObject(ANode: TXmlNode; AObject: TObject; AParent: TComponent);
  調用ReadObject從TXmlNode類型的ANode讀取AObject公佈的屬性。指定AParent爲了解決Parent正確的方法和事件參考。
4.1.15.TsdXmlObjectWriter類
  TsdXmlObjectWriter = class(TPersistent)
  使用TsdXmlObjectWriter能夠將任何TPersistent後裔公佈的屬性,寫入到一個XML節點。
4.1.15.1.WriteComponent
  procedure WriteComponent(ANode: TXmlNode; AComponent: TComponent; AParent: TComponent);
  調用WriteComponent將AComponent的公佈的屬性寫入到TxmlNode類型的ANode中。指定AParent爲了儲存Parent正確的方法和事件參考。
  譯者注:WriteComponent調用WriteObject完成工做。
4.1.15.2.WriteObject
  procedure WriteObject(ANode: TXmlNode; AObject: TObject; AParent: TComponent);
  調用WriteObject將AObject的公佈的屬性寫入到TxmlNode類型的ANode中。指定AParent爲了儲存Parent正確的方法和事件參考。  ui




-END-編碼


長按下方二維碼關注微卡智享url




本文分享自微信公衆號 - 微卡智享(VaccaeShare)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。spa

相關文章
相關標籤/搜索