首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Delphi使用NativeXml处理XML(四)

Delphi使用NativeXml处理XML(四)

作者头像
Vaccae
发布2019-07-24 11:03:56
1.8K0
发布2019-07-24 11:03:56
举报
文章被收录于专栏:微卡智享微卡智享

正文

4.2.函数(Functions)

4.2.1.ComponentCreateFromXmlFile   unit NativeXmlObjectStorage   function ComponentCreateFromXmlFile(const FileName: string; Owner: TComponent; const Name: string): TComponent;   从文件名称为FileName的XML文件读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它调用ComponentCreateFromXmlStream实现。 4.2.2.ComponentCreateFromXmlNode   function ComponentCreateFromXmlNode(ANode: TXmlNode; Owner: TComponent; const Name: string): TComponent;   从TXmlNode类型的ANode节点读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它使用TsdXmlObjectReader类实现。 4.2.3.ComponentCreateFromXmlStream   function ComponentCreateFromXmlStream(S: TStream; Owner: TComponent; const Name: string): TComponent;   从XML流类型的S中读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它调用ComponentCreateFromXmlNode实现。 4.2.4.ComponentCreateFromXmlString   function ComponentCreateFromXmlString(const Value: string; Owner: TComponent; const Name: string): TComponent;   从XML字符串类型的Value中读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它调用ComponentCreateFromXmlStream实现。 4.2.5.ComponentSaveToXmlFile   procedure ComponentSaveToXmlFile(AComponent: TComponent; const FileName: string; AParent: TComponent);   存储组件AComponent所有公布的属性到名为FileName 的XML文件。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlFile实现。 4.2.6.ComponentSaveToXmlNode   procedure ComponentSaveToXmlNode(AComponent: TComponent; ANode: TXmlNode; AParent: TComponent);   存储组件AComponent所有公布的属性到TXmlNode格式的ANode中。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlNode实现。 4.2.7.ComponentSaveToXmlStream   procedure ComponentSaveToXmlStream(AComponent: TComponent; S: TStream; AParent: TComponent);   存储组件AComponent所有公布的属性到XML格式的流S中。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlStream实现。 4.2.8.ComponentSaveToXmlString   function ComponentSaveToXmlString(AComponent: TComponent; AParent: TComponent): string;   存储组件AComponent所有公布的属性到XML格式的字符串中。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlString实现。 4.2.9.DecodeBase64   Unit NativeXml   function DecodeBase64(const Source: UTF8String): RawByteString;   解码BASE64的数据Source为二进制数据。该函数返回为UTF8String的二进制数据。使用TStringStream转换这些数据流。源UTF8String可能包含换行符和控制字符,这些符号将被忽略。 4.2.10.DecodeBinHex   Unit NativeXml   function DecodeBinHex(const Source: UTF8String): RawByteString;   解码BinHex数据Source为二进制数据。该函数返回为UTF8String的二进制数据。使用TStringStream转换这些数据流。源UTF8String可能包含换行符和控制字符,这些符号将被忽略。 4.2.11.EncodeBase64   Unit NativeXml   function EncodeBase64(const Source: RawByteString): UTF8String;   二进制数据Source编码为BASE64。该函数返回UTF8String格式的BASE64编码数据,没有任何换行符。 4.2.12.EncodeBinHex   Unit NativeXml   function EncodeBinHex(const Source: RawByteString): UTF8String;   二进制数据Source编码为BINHEX。该函数返回UTF8String格式的BINHEX编码数据,没有任何换行符。 4.2.13.FormCreateFromXmlFile   function FormCreateFromXmlFile(const FileName: string; Owner: TComponent; const Name: string): TForm;   从文件名称为FileName的XML文件读取并创建窗体。为了成功地从头开始创建窗体,窗体的类必须事先调用RegisterClass进行登记。添加窗体到指定Owner的子组件列表。这通常是一个形式。指定Name作为创建的窗体的新窗体的名称。 注:它调用FormCreateFromXmlStream实现。 4.2.14.FormCreateFromXmlStream   function FormCreateFromXmlStream(S: TStream; Owner: TComponent; const Name: string): TForm;   从XML流格式的S读取并创建窗体。为了成功地从头开始创建窗体,窗体的类必须事先调用RegisterClass进行登记。添加窗体到指定Owner的子组件列表。这通常是一个形式。指定Name作为创建的窗体的新窗体的名称。 注:它调用ComponentCreateFromXmlNode实现。 4.2.15.FormCreateFromXmlString   function FormCreateFromXmlString(const Value: string; Owner: TComponent; const Name: string): TForm;   从XML字符串格式的Value读取并创建窗体。为了成功地从头开始创建窗体,窗体的类必须事先调用RegisterClass进行登记。添加窗体到指定Owner的子组件列表。这通常是一个形式。指定Name作为创建的窗体的新窗体的名称。 注:它调用FormCreateFromXmlStream实现。 4.2.16.FormSaveToXmlFile   procedure FormSaveToXmlFile(AForm: TForm; const FileName: string);   存储窗体AForm到名为FileName 的XML文件。这个方法存储窗体上所有的子组件,因而可以作为窗体存储的一种方法。 注:它调用ComponentSaveToXmlFile完成工作。 4.2.17.FormSaveToXmlStream   procedure FormSaveToXmlStream(AForm: TForm; S: TStream);   存储窗体AForm到XML流格式的S中。这个方法存储窗体上所有的子组件,因而可以作为窗体存储的一种方法。 注:它调用ComponentSaveToXmlStream实现。 4.2.18.FormSaveToXmlString   function FormSaveToXmlString(AForm: TForm): string;   存储窗体AForm到XML字符串格式中。这个方法存储窗体上所有的子组件,因而可以作为窗体存储的一种方法。 注:它调用ComponentSaveToXmlString实现。 4.2.19.ObjectLoadFromXmlFile   procedure ObjectLoadFromXmlFile(AObject: TObject; const FileName: string; AParent: TComponent);   从文件名称为FileName的XML文件读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。 注:它调用ObjectLoadFromXmlStream实现。 4.2.20.ObjectLoadFromXmlNode   procedure ObjectLoadFromXmlNode(AObject: TObject; ANode: TXmlNode; AParent: TComponent);   从TXmlNode格式的ANode中读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。 注:它使用TsdXmlObjectReader类实现。 4.2.21.ObjectLoadFromXmlStream   procedure ObjectLoadFromXmlStream(AObject: TObject; S: TStream; AParent: TComponent);   从XML流格式的S中读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。 注:它调用ObjectLoadFromXmlNode实现。 4.2.22.ObjectLoadFromXmlString   procedure ObjectLoadFromXmlString(AObject: TObject; const Value: string; AParent: TComponent);   从XML字符串格式的Value中读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。 注:它调用ObjectLoadFromXmlStream实现。 4.2.23.ObjectSaveToXmlFile   procedure ObjectSaveToXmlFile(AObject: TObject; const FileName: string; AParent: TComponent); 存储AObject所有公布的属性到文件名称为FileName的XML文件。指定AParent为了解决Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlStream实现。 4.2.24.ObjectSaveToXmlNode   procedure ObjectSaveToXmlNode(AObject: TObject; ANode: TXmlNode; AParent: TComponent);   存储AObject所有公布的属性到TXmlNode类型的的ANode中。指定AParent为了解决Parent正确的方法和事件参考。 注:它使用TsdXmlObjectWriter类实现。 4.2.25.ObjectSaveToXmlStream   procedure ObjectSaveToXmlStream(AObject: TObject; S: TStream; AParent: TComponent);   存储AObject所有公布的属性到XML流格式的S中。指定AParent为了解决Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlNode实现。 4.2.26.ObjectSaveToXmlString   function ObjectSaveToXmlString(AObject: TObject; AParent: TComponent): string;   存储AObject所有公布的属性到XML字符串格式的Value中。指定AParent为了解决Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlStream实现。 4.2.27.sdAddControlChars   Unit NativeXml   function sdAddControlChars(const AValue: UTF8String; const Chars: UTF8String; Interval: integer): UTF8String;   这个函数将在Interval间隔的字符后,反复向UTF8String类型的AValue区间增加控制字符Chars。 4.2.28.sdAnsiToUtf8   Unit NativeXml   function sdAnsiToUtf8(const S: AnsiString): UTF8String;   转换一个AnsiString 类型字符串为一个UTF8编码字符串。 4.2.29.sdDateTimeFromString   Unit NativeXml   function sdDateTimeFromString(const ADate: UTF8String; UseLocalBias: Boolean): TDateTime;   根据W3C日期/时间规范,转换UTF8String类型的ADate为日期时间(TDateTime)类型,可以在http://www.w3.org/TR/NOTE-datetime找到该规范。如果有一个转换错误,将引发异常。 4.2.30.sdDateTimeFromStringDefault   Unit NativeXml   function sdDateTimeFromStringDefault(const ADate: UTF8String; ADefault: TDateTime; UseLocalBias: Boolean): TDateTime;   根据W3C日期/时间规范,转换UTF8String类型的ADate为日期时间(TDateTime)类型,可以在http://www.w3.org/TR/NOTE-datetime找到该规范。如果有一个转换错误,返回缺省值ADefault。 4.2.31.sdDateTimeToString   Unit NativeXml   function sdDateTimeToString(ADate: TDateTime; UseLocalBias: Boolean): UTF8String;   根据W3C日期/时间规范,转换日期时间(TDateTime)类型的ADate为UTF8String类型,可以在http://www.w3.org/TR/NOTE-datetime找到该规范。 4.2.32.sdRemoveControlChars   Unit NativeXml   function sdRemoveControlChars(const AValue: UTF8String): UTF8String;   这个函数从UTF8String类型的AValue中移除控制字符(Tab, CR, LF and Space)。 4.2.33.sdUnicodeToUtf8   Unit NativeXml   function sdUnicodeToUtf8(const W: UnicodeString): UTF8String;   转换一个UnicodeString到UTF8编码字符串。 4.2.34.sdUpCase   Unit NativeXml   function sdUpCase(Ch: AnsiChar): AnsiChar;   将字符转换为大写('a'..'z' 变为 'A'..'Z')。 4.2.35.sdUTF8EscapeString   Unit NativeXml   function sdUTF8EscapeString(const AValue: UTF8String): UTF8String;   将AValue的所有转义字符转换成相应的字符串。 4.2.36.sdUTF8FindString   Unit NativeXml   function sdUTF8FindString(const SubString: UTF8String; const S: UTF8String; Start: integer; Close: integer; var APos: integer): boolean;   在UTF8String格式的S中查找子字符串SubString,仅在Start和Close之间查找字符。如果找到,函数返回True。APos体现找到的第一个位置。 4.2.37.sdUTF8MatchString   Unit NativeXml   function sdUTF8MatchString(const SubString: UTF8String; const S: UTF8String; Start: integer): boolean;   检查UTF8String格式的S中,Start位置是否有子字符串SubString。 4.2.38.sdUTF8ParseAttributes   Unit NativeXml   procedure sdUTF8ParseAttributes(const AValue: UTF8String; Start: integer; Close: integer; Attributes: TsdUTF8StringList);   在UTF8String格式的AValue中查找所有Name =“Value”片段(从Start到Close – 1),并把所产生的属性写入StringList中。调用这个函数前这StringList必须已初始化。 4.2.39.sdUTF8QuotedString   Unit NativeXml   function sdUTF8QuotedString(const AValue: UTF8String): UTF8String;   用引号将字符串AValue括起来。 4.2.40.sdUTF8StringReplace   Unit NativeXml   function sdUTF8StringReplace(const S: UTF8String; const OldPattern: UTF8String; const NewPattern: UTF8String): UTF8String; 4.2.41.sdUtf8ToAnsi   Unit NativeXml   function sdUtf8ToAnsi(const S: UTF8String): AnsiString;   UTF8编码的字符串转换为AnsiString类型。可能会导致损失!

4.2.42.sdUtf8ToUnicode   Unit NativeXml   function sdUtf8ToUnicode(const S: UTF8String): UnicodeString;   转换一个UTF8编码字符串到UnicodeString。 4.2.43.sdUTF8Trim   Unit NativeXml   function sdUTF8Trim(const AValue: UTF8String): UTF8String;   修剪UTF8String类型字符串AValue两端的控制字符(Tab、LF、CR、Space)。 4.2.44.sdUTF8TrimPos   Unit NativeXml   function sdUTF8TrimPos(const AValue: UTF8String; var Start: integer; var Close: integer): boolean;   在Start和Close - 1之间修剪UTF8String字符串AValue(删除Start和Close – 1之间空格)。如果结果UTF8String仍然有一个长度> 0,函数返回True。 4.2.45.sdUTF8UnEscapeString   Unit NativeXml   function sdUTF8UnEscapeString(const AValue: UTF8String): UTF8String;   替换字符串AValue中所有转义的原始字符。这些字符包括&#...;和&#x..; 4.2.46.sdUTF8UnQuotedString   Unit NativeXml   function sdUTF8UnQuotedString(const AValue: UTF8String): UTF8String;   从字符串AValue 中移除引号。 4.2.47.sdUTF8WriteStringToStream   Unit NativeXml   procedure sdUTF8WriteStringToStream(S: TStream; const AString: UTF8String);   写一个UTF8String字符串到流S。 4.2.48.sdWriteNumber   Unit NativeXml   function sdWriteNumber(Value: double; SignificantDigits: integer; AllowScientific: boolean): UTF8String;   转换一个数值到一个UTF8String字符串,使用SignificantDigits来表示有效位数,如果想要更短的结果,设置AllowScientific允许使用科学记数法。 4.2.49.XmlAppendToExistingFile   Unit: NativeXmlAppend   procedure XmlAppendToExistingFile(const AFilename: string; ANode: TXmlNode; ALevel: integer {$IFDEF D4UP});   有了这个程序,我们可以添加一个节点(TXmlNode)到现有的XML文件。该文件将不会被完整读入,其数据将只是在最后追加。为了做到这一点,该文件是从最终扫描,找到最后的位于ALevel层次的节点。 ALevel = 0将添加在最后的新节点。这是不明智的,因为XML不允许多个根节点。选择ALevel = 1添加在根目录下(默认)第1级的新节点。   提示:如果你想开始一个空的(模板)XmlDocument中,一定要保存它之前设置TsdXmlDocument.UseFullNodes为True。这将确保在根节点上正确增加。 注1:此方法不适用于Unicode文件。 4.3.类型(Types) 4.3.1.PBigByteArray   Unit NativeXml   PBigByteArray = ^TBigByteArray; 4.3.2.PUnicodeChar   Unit NativeXml   PUnicodeChar = PWideChar; 4.3.3.RawByteString   Unit NativeXml   RawByteString = AnsiString; 4.3.4.TBigByteArray   Unit NativeXml   TBigByteArray = array[0..MaxInt - 1] of byte;   TBigByteArray是一个类似标准TByteArray(Windows单元),但它可以包含多达到maxInt个字节数组。当工作与缓冲区大于32768个字节,有助于避免这种类型范围检查错误。 4.3.5.TBinaryEncodingType   Unit NativeXml   TBinaryEncodingType = (xbeBinHex, xbeBase64);   调用TXmlNode的BufferRead和BufferWrite时,使用TBinaryEncodingType选择采样什么样的二进制编码。 4.3.6.TBytes   Unit NativeXml   TBytes = TBigByteArray; 4.3.7.TPointer   Unit NativeXml   TPointer = Pointer; 4.3.8.TsdStreamModeType   Unit NativeXml   TsdStreamModeType = (umUnknown, umRead, umWrite);   此枚举定义转换流访问模式。 4.3.9.TStringEncodingType   Unit NativeXml   TStringEncodingType = (seAnsi, seUCS4BE, seUCS4LE, seUCS4_2143, seUCS4_3412, se16BitBE, se16BitLE, seUTF8, seUTF16BE, seUTF16LE, seEBCDIC);   定义的字符串的编码方式。 4.3.10.TXmlCompareOption   Unit NativeXml   TXmlCompareOption = (xcNodeName, xcNodeType, xcNodeValue, xcAttribCount, xcAttribNames, xcAttribValues, xcChildCount, xcChildNames, xcChildValues, xcRecursive); 4.3.11.TXmlCompareOptions   Unit NativeXml   TXmlCompareOptions = set of TXmlCompareOption; 4.3.12.TXmlElementType   Unit NativeXml   TXmlElementType = (xeNormal, xeComment, xeCData, xeDeclaration, xeStylesheet, xeDoctype, xeElement, xeAttList, xeEntity, xeNotation, xeExclam, xeQuestion, xeCharData, xeUnknown);   TXmlElementType列举了可以在XML文档中元素的不同类型。 4.3.13.TXmlFormatType   Unit NativeXml   TXmlFormatType = (xfReadable, xfCompact);   TNativeXml.Format说明: xfReadable(默认)能够用标准的编辑器读取的xml文件。 xfCompact来保存XML完全兼容和最小尺寸。 4.3.14.TXmlNodeCompareEvent   Unit NativeXml   TXmlNodeCompareEvent = function (Sender: TObject; Node1, Node2: TXmlNode; Info: TPointer): integer of object;   此事件是用在TNativeXml.OnNodeCompare事件,如果Node1 < Node2应返回-1,如果Node1 = Node2应返回0,如果Node1 > Node2应返回1。 4.3.15.TXMLNodeCompareFunction   Unit NativeXml   TXMLNodeCompareFunction = function (Node1, Node2: TXmlNode; Info: TPointer): integer;   通过TXmlNode.SortChildNodes调用的函数。如果Node1 < Node2应返回-1,如果Node1 = Node2应返回0,如果Node1 > Node2应返回1。 4.3.16.TXmlNodeEvent   Unit NativeXml   TXmlNodeEvent = procedure (Sender: TObject; Node: TXmlNode) of object;   一个基于对象的TXmlNode节点为基础的事件。 4.3.17.TXmlProgressEvent   Unit NativeXml   TXmlProgressEvent = procedure (Sender: TObject; Size: integer) of object;   一个被用来表示加载或保存进度事件。 4.3.18.UnicodeChar   Unit NativeXml   UnicodeChar = WideChar; 4.3.19.UnicodeString   Unit NativeXml   UnicodeString = WideString; 4.3.20.ustring   Unit NativeXmlAppend   ustring = UTF8String; 4.4.变量(Variables)   Unit NativeXml;   cDefaultBinaryEncoding: TBinaryEncodingType = xbeBase64;   cDefaultDropCommentsOnParse: boolean = False;   cDefaultEncodingString: UTF8String = 'UTF-8';   cDefaultExternalEncoding: TStringEncodingType = seUTF8;   cDefaultFloatAllowScientific: boolean = True;   cDefaultFloatSignificantDigits: integer = 6;   cDefaultIndentString: UTF8String = ' ';   cDefaultUseFullNodes: boolean = False;   cDefaultUseLocalBias: boolean = False;   cDefaultVersionString: UTF8String = '1.0';   cDefaultWriteOnDefault: boolean = True;   cDefaultXmlFormat: TXmlFormatType = xfCompact; 4.5.常量(Constants) 4.5.1.Unit: NativeXml   cBase64Char: array[0..63] of AnsiChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';   这些Ansi符号用于从数据缓冲区生成BASE64字符时使用。   cBase64PadChar: AnsiChar = '=';

  cBomInfoCount = 15;   cBomInfo: array[0..cBomInfoCount - 1] of TBomInfo = ( (BOM: ($00,$00,$FE,$FF); Len: 4; Encoding: seUCS4BE; HasBOM: true), (BOM: ($FF,$FE,$00,$00); Len: 4; Encoding: seUCS4LE; HasBOM: true), (BOM: ($00,$00,$FF,$FE); Len: 4; Encoding: seUCS4_2143; HasBOM: true), (BOM: ($FE,$FF,$00,$00); Len: 4; Encoding: seUCS4_3412; HasBOM: true), (BOM: ($FE,$FF,$00,$00); Len: 2; Encoding: seUTF16BE; HasBOM: true), (BOM: ($FF,$FE,$00,$00); Len: 2; Encoding: seUTF16LE; HasBOM: true), (BOM: ($EF,$BB,$BF,$00); Len: 3; Encoding: seUTF8; HasBOM: true), (BOM: ($00,$00,$00,$3C); Len: 4; Encoding: seUCS4BE; HasBOM: false), (BOM: ($3C,$00,$00,$00); Len: 4; Encoding: seUCS4LE; HasBOM: false), (BOM: ($00,$00,$3C,$00); Len: 4; Encoding: seUCS4_2143; HasBOM: false), (BOM: ($00,$3C,$00,$00); Len: 4; Encoding: seUCS4_3412; HasBOM: false), (BOM: ($00,$3C,$00,$3F); Len: 4; Encoding: seUTF16BE; HasBOM: false), (BOM: ($3C,$00,$3F,$00); Len: 4; Encoding: seUTF16LE; HasBOM: false), (BOM: ($3C,$3F,$78,$6D); Len: 4; Encoding: seAnsi; HasBOM: false), (BOM: ($4C,$6F,$A7,$94); Len: 4; Encoding: seEBCDIC; HasBOM: false) );

  cControlChars: set of AnsiChar = [#9, #10, #13, #32];   Tab, LF, CR, Space

  cEscapeCount = 5;   不同的转义字符数   cEscapes: array[0..cEscapeCount - 1] of UTF8String = ('&', '<', '>', '''', '"');   这些都是必须转义字符。   cHexChar: array[0..15] of AnsiChar = '0123456789ABCDEF';   这些常数用于从数据缓冲区生成hex字符   cHexCharLoCase: array[0..15] of AnsiChar = '0123456789abcdef';

  cMaxBufferSize = $10000;   65536字节的缓冲区   cNativeXmlVersion = '3.10';   NativeXml单元的当前版本   cNodeValueBuf = 2048;   在每个值的缓冲区增加分配的字节数   cQuoteChars: set of AnsiChar = ['"', ''''];

  cReplaces: array[0..cEscapeCount - 1] of UTF8String = ('&amp;', '&lt;', '&gt;', '&apos;', '&quot;');   这些字符串替换转义字符 - 相同的顺序   cTags: array[0..cTagCount - 1] of TTagType = ( (FClose: '>]]'; FStart: '[ATADC[!<'), (FClose: '>--'; FStart: '--!<'), (FClose: '>?'; FStart: '?<'), (FClose: '>'; FStart: '<') );

  sxeCannotConverToBool = 'Cannot convert value to bool';   sxeCannotConvertToFloat = 'Cannot convert value to float';   sxeDeclarationMustBeFirstElem = 'Xml declaration must be first element';   sxeDoctypeAfterRootElement = 'Doctype declaration found after root element';   sxeIllegalElementType = 'Illegal element type';   sxeMoreThanOneDeclaration = 'More than one xml declaration found in xml';   sxeMoreThanOneDoctype = 'More than one doctype declaration found in root';   sxeSignificantDigitsOutOfRange = 'Significant digits out of range';   sxeXmlNodeNotAssigned = 'XML Node is not assigned';

  xcAll: TXmlCompareOptions = [xcNodeName, xcNodeType, xcNodeValue, xcAttribCount, xcAttribNames, xcAttribValues, xcChildCount, xcChildNames, xcChildValues, xcRecursive]; 4.5.2.Unit:NativeXmlObjectStorage   sxrInvalidPropertyValue = 'Invalid property value';   sxrUnregisteredClassType = 'Unregistered classtype encountered in ';   sxwIllegalVarType = 'Illegal variant type';   sxwInvalidMethodName = 'Invalid method name'; 4.6.单元 4.6.1.NativeXml.pas   unit NativeXml   这是执行读取和写入XML文档的一个小巧的Delpi代码。   您可以使用此代码从文件、流或字符串中读取XML文档,。在装载过程中,产生可用于显示加载进度的事件。 注:任何外部编码(ANSI,UTF16等)转换为一个内部编码是ANSI或UTF8。当加载的文档基于ANSI,将是ANSI编码,在其他情况下(使用UTF8,UTF16)的编码将是UTF8。   原作者:Nils Haeck硕士(n.haeck @ simdesign.nl)原稿日期:2003年4月1日

  版本   见下文版权所有(c)2003-2010 Simdesign BV的贡献者(补):斯特凡Glienke   首先在所附LICENSE.txt许可条件下,它不允许在任何情况下出版或复制这个代码!

  该软件是基于一个分布式“AS IS”,没有任何明示或暗示的保证。   有关详细信息,请访问http://www.simdesign.nl/xml.html。 4.6.1.1.类(Classes)   TNativeXml   TsdBufferedReadStream   TsdBufferedStream   TsdBufferedWriteStream   TsdCodecStream   TsdStringBuilder   TsdSurplusReader   TsdUtf8Stream   TsdUTF8StringList   TsdUTF8StringStream   TXmlNode   TXmlNodeList 4.6.1.2.函数(Functions)   DecodeBase64   DecodeBinHex   EncodeBase64   EncodeBinHex   sdAddControlChars   sdAnsiToUtf8   sdDateTimeFromString   sdDateTimeFromStringDefault   sdDateTimeToString   sdRemoveControlChars   sdUnicodeToUtf8   sdUpCase   sdUTF8EscapeString   sdUTF8FindString   sdUTF8MatchString   sdUTF8ParseAttributes   sdUTF8QuotedString   sdUTF8StringReplace   sdUtf8ToAnsi   sdUtf8ToUnicode   sdUTF8Trim   sdUTF8TrimPos   sdUTF8UnEscapeString   sdUTF8UnQuotedString   sdUTF8WriteStringToStream   sdWriteNumber 4.6.1.3.类型(Types)   PBigByteArray   PUnicodeChar   RawByteString   TBigByteArray   TBinaryEncodingType   TBytes   TPointer   TsdStreamModeType   TStringEncodingType   TXmlCompareOption   TXmlCompareOptions   TXmlElementType   TXmlFormatType   TXmlNodeCompareEvent   TXMLNodeCompareFunction   TXmlNodeEvent   TXmlProgressEvent   UnicodeChar   UnicodeString 4.6.1.4.变量(Variables)   cDefaultBinaryEncoding   cDefaultDropCommentsOnParse   cDefaultEncodingString   cDefaultExternalEncoding   cDefaultFloatAllowScientific   cDefaultFloatSignificantDigits   cDefaultIndentString   cDefaultUseFullNodes   cDefaultUseLocalBias   cDefaultVersionString   cDefaultWriteOnDefault   cDefaultXmlFormat 4.6.1.5.常量(Constants)   cBase64Char   cBase64PadChar   cBomInfo   cBomInfoCount   cControlChars   cEscapeCount   cEscapes   cHexChar   cHexCharLoCase   cMaxBufferSize   cNativeXmlVersion   cNodeValueBuf   cQuoteChars   cReplaces   cTags   sxeCannotConverToBool   sxeCannotConvertToFloat   sxeDeclarationMustBeFirstElem   sxeDoctypeAfterRootElement   sxeIllegalElementType   sxeMoreThanOneDeclaration   sxeMoreThanOneDoctype   sxeSignificantDigitsOutOfRange   sxeXmlNodeNotAssigned   xcAll 4.6.2.NativeXmlAppend.pas   Unit NativeXmlAppend   本机实现了一个方法,将XML片段到现有XML文件的结尾。该文件永远不会完全加载到内存中,新的数据将在文件尾部追加。   这种单元需要NativeXml。   可能的例外(除了定期进行文件访问的):   “开始阅读逆向流”:S中提供的文件不是一个XML文件,或者它是一个XML文件,但是没有足够的层次。该XML文件应该在其ALevel元素后至少含有一个标签。该算法通过完整的文件,并从开始之际抵达没有找到一个合适的位置插入节点数据。    “层次无法找到”这将引发异常当最后一个元素不包含足够的层次,因此算法遇到一个开放的标记,其中它期望一个结束标记。 4.6.2.1.例子 1   我们试图在这个XML文件中加入3级节点< Root><Level1> <Level2> </Level2> </Level1> <Level1> < -- 这个最后一个节点没有2级,所以该算法</Level1>不知道从哪里加3级的数据到2级下</ Root >   看一个实现例子4

  原作者:Nils Haeck硕士,版权所有(c)2003-2009 Simdesign B.V.   首先在所附LICENSE.txt许可条件下,它不允许在任何情况下出版或复制这个代码!   该软件是基于一个分布式“AS IS”,没有任何明示或暗示的保证。   有关详细信息,请访问http://www.simdesign.nl/xml.html。 4.6.2.2.函数(Functions)   XmlAppendToExistingFile 4.6.2.3.类型(Types)   ustring


-END-

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

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

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

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

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