前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Delphi使用NativeXml处理XML(二)

Delphi使用NativeXml处理XML(二)

作者头像
Vaccae
发布2019-07-25 11:28:22
1.2K0
发布2019-07-25 11:28:22
举报
文章被收录于专栏:微卡智享微卡智享

前言

我们接着上文的《Delphi使用NativeXml处理XML(一)》继续进行。

正文

四、符号引用(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。例如:

代码语言:javascript
复制
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

代码语言:javascript
复制
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正确的方法和事件参考。


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档